From 5f83ce61e1ff106a420b1cf2628fa0c28cc2ca16 Mon Sep 17 00:00:00 2001 From: Chili Palmer Date: Sun, 9 Aug 2026 09:00:41 +0000 Subject: [PATCH] Generate visual parameter and foliage catalogs (#48) --- .gitea/workflows/codegen.yml | 6 +- Cargo.lock | 10 + README.md | 7 + api/SHIM-COVERAGE.md | 2 +- codegen/README.md | 27 +- crates/libremetaverse/src/foliage_catalog.rs | 471 + crates/libremetaverse/src/generated.rs | 566 +- crates/libremetaverse/src/lib.rs | 4 + crates/libremetaverse/src/visual_catalog.rs | 23378 ++++++++++++++++ .../tests/generated_catalogs.rs | 282 + tools/codegen/Cargo.toml | 1 + tools/codegen/src/lib.rs | 22 + tools/codegen/src/xml_catalog.rs | 1104 + tools/generate_api_shims.py | 28 + tools/generate_rust_mapping.py | 4 + 15 files changed, 25447 insertions(+), 465 deletions(-) create mode 100644 crates/libremetaverse/src/foliage_catalog.rs create mode 100644 crates/libremetaverse/src/visual_catalog.rs create mode 100644 crates/libremetaverse/tests/generated_catalogs.rs create mode 100644 tools/codegen/src/xml_catalog.rs diff --git a/.gitea/workflows/codegen.yml b/.gitea/workflows/codegen.yml index f62bc68..57eeaaf 100644 --- a/.gitea/workflows/codegen.yml +++ b/.gitea/workflows/codegen.yml @@ -21,11 +21,15 @@ jobs: cargo test -p libremetaverse --lib generated_codec_tests cargo test -p libremetaverse --test packet_wire cargo test -p libremetaverse-compat-tests --test wire_semantics + - name: Test generated visual and foliage catalogs + run: | + cargo test -p libremetaverse --test generated_catalogs + cargo test -p libremetaverse-compat-tests --test appearance_visual_semantics - name: Regenerate twice without reference checkout access run: | cargo run -p libremetaverse-codegen -- generate cargo run -p libremetaverse-codegen -- generate - git diff --exit-code -- codegen/generated crates/libremetaverse/src/packet_catalog.rs + git diff --exit-code -- codegen/generated crates/libremetaverse/src/packet_catalog.rs crates/libremetaverse/src/visual_catalog.rs crates/libremetaverse/src/foliage_catalog.rs - name: Lint native generator run: | cargo clippy -p libremetaverse-codegen --all-targets -- -D warnings diff --git a/Cargo.lock b/Cargo.lock index 13bc998..8feebdc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -375,6 +375,7 @@ name = "libremetaverse-codegen" version = "0.0.1" dependencies = [ "prettyplease", + "roxmltree", "serde", "serde_json", "sha2", @@ -670,6 +671,15 @@ version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" +[[package]] +name = "roxmltree" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1964b10c76125c36f8afe190065a4bf9a87bf324842c05701330bba9f1cacbb" +dependencies = [ + "memchr", +] + [[package]] name = "rustc-hash" version = "2.1.3" diff --git a/README.md b/README.md index 34afc18..391b7e1 100644 --- a/README.md +++ b/README.md @@ -236,3 +236,10 @@ appended ACKs, little-endian fields, big-endian ports, fixed and length-prefixed data, block repetition, zerocoding, bounded decoding, and MTU packet splitting. Golden-byte tests and generated round trips cover every packet type without requiring the C# toolchain at build or test time. +The native XML generators also emit all 672 visual parameters and all 21 tree +and 6 grass definitions from the pinned character and foliage inputs. Generated +types preserve ranges, defaults, groups, wearables, color/alpha data, driven +relationships, skeletal/volume morphs, and every foliage rendering property. +Schema validation rejects malformed or ambiguous input, while sorted visual-ID +and source-indexed foliage lookups preserve the ordering observable in the +reference APIs and packet bytes. diff --git a/api/SHIM-COVERAGE.md b/api/SHIM-COVERAGE.md index 6a37c29..dbfbc39 100644 --- a/api/SHIM-COVERAGE.md +++ b/api/SHIM-COVERAGE.md @@ -4,7 +4,7 @@ Generated by `python3 tools/generate_api_shims.py`; do not edit by hand. | Assembly | Types | Members | Status | |---|---:|---:|---| -| `LibreMetaverse` | 2,711 | 27,281 | native implementation: 5 types / 10,469 members; remaining surface is callable failure-only shims | +| `LibreMetaverse` | 2,711 | 27,281 | native implementation: 16 types / 10,554 members; remaining surface is callable failure-only shims | | `LibreMetaverse.Imaging.Abstractions` | 3 | 20 | native implementation: 3 types / 20 members; no generated shims remain | | `LibreMetaverse.Imaging.Skia` | 1 | 3 | native implementation: 1 type / 3 members; no generated shims remain | | `LibreMetaverse.LslTools` | 164 | 768 | callable failure-only shim | diff --git a/codegen/README.md b/codegen/README.md index 4f4aad5..8529d46 100644 --- a/codegen/README.md +++ b/codegen/README.md @@ -69,6 +69,28 @@ Rust API compile fixture then compiles every mapped generated member, while the packet catalog test exercises representative low/medium/high, fixed, multiple, variable, and unknown dispatch behavior. +## Visual parameters and foliage + +The visual-parameter generator parses the pinned `avatar_lad.xml` with explicit +root, attribute, numeric, vector, color, relationship, and duplicate-ID +validation. Its checked-in +[`visual_catalog.rs`](../crates/libremetaverse/src/visual_catalog.rs) output +contains all 672 public parameters, including ranges and defaults, groups, +wearable associations, alpha/color data, driven relationships, skeletal +distortions, and volume morphs. `VisualParams::params()` exposes a +`BTreeMap`-backed sorted list keyed by parameter ID. The 253 group-0/group-3 +transmitted IDs are kept in ascending numeric order because that order is +observable in `AvatarAppearance` bytes; no other XML order is retained. + +The foliage generator validates `trees.xml` and `grass.xml`, including UUIDs, +all numeric properties, unique IDs, and the contiguous source-order species +index required by the reference `Get` implementation. Its checked-in +[`foliage_catalog.rs`](../crates/libremetaverse/src/foliage_catalog.rs) output +uses source-ordered vectors, so tree and grass enum discriminants provide +constant-time indexed lookup. Golden fixtures cover all catalog counts, +representative complete records, public getters/setters, appearance decoding, +and every generated relationship category. + ## Commands Regenerate every currently registered Rust output using only checked-in data: @@ -94,5 +116,6 @@ cargo run -p libremetaverse-codegen -- vendor ../libremetaverse Generation uses UTF-8 with an optional BOM, normalizes CRLF/CR to LF, rejects NUL input, reports stable `path:line:column: severity[code]` diagnostics, sorts manifest records by stable IDs, emits provenance-rich generated headers, and -always terminates output with one LF. Tests generate both outputs twice in -memory and require byte identity before comparing with the checked-in files. +always terminates output with one LF. Tests generate every registered output +twice in memory and require byte identity before comparing with the checked-in +files. diff --git a/crates/libremetaverse/src/foliage_catalog.rs b/crates/libremetaverse/src/foliage_catalog.rs new file mode 100644 index 0000000..f19a0e9 --- /dev/null +++ b/crates/libremetaverse/src/foliage_catalog.rs @@ -0,0 +1,471 @@ +// @generated by libremetaverse-codegen; DO NOT EDIT. +// Regenerate: cargo run -p libremetaverse-codegen -- generate +// Generator: foliage +// Source: codegen/inputs/trees.xml sha256=f54e626b00bd2c4fec9f59a574a45860f209e4440bbb02b81d27050b9df8ffba license=BSD-3-Clause +// Source: codegen/inputs/grass.xml sha256=90015f9768afe3cfee761d04239bf9e284b2739b095b7ab8331966fa1fbfcb4e license=BSD-3-Clause + +#![allow(clippy::missing_errors_doc, clippy::must_use_candidate, clippy::too_many_lines)] +use std::sync::OnceLock; +#[derive(Clone, Debug, PartialEq)] +pub struct TreeDefinition { + name: String, + species_id: i32, + texture_id: libremetaverse_types::UUID, + droop: f32, + twist: f32, + branches: f32, + depth: i32, + scale_step: f32, + trunk_depth: f32, + branch_length: f32, + trunk_length: f32, + leaf_scale: f32, + billboard_scale: f32, + billboard_ratio: f32, + trunk_aspect: f32, + branch_aspect: f32, + leaf_rotate: f32, + noise_mag: f32, + noise_scale: f32, + taper: f32, + repeat_z: i32, +} +impl TreeDefinition { + pub fn name(&self) -> String { + self.name.clone() + } + pub fn set_name(&mut self, value: String) { + self.name = value; + } + pub fn species_id(&self) -> i32 { + self.species_id + } + pub fn set_species_id(&mut self, value: i32) { + self.species_id = value; + } + pub fn texture_id(&self) -> libremetaverse_types::UUID { + self.texture_id + } + pub fn set_texture_id(&mut self, value: libremetaverse_types::UUID) { + self.texture_id = value; + } + pub fn droop(&self) -> f32 { + self.droop + } + pub fn set_droop(&mut self, value: f32) { + self.droop = value; + } + pub fn twist(&self) -> f32 { + self.twist + } + pub fn set_twist(&mut self, value: f32) { + self.twist = value; + } + pub fn branches(&self) -> f32 { + self.branches + } + pub fn set_branches(&mut self, value: f32) { + self.branches = value; + } + pub fn scale_step(&self) -> f32 { + self.scale_step + } + pub fn set_scale_step(&mut self, value: f32) { + self.scale_step = value; + } + pub fn trunk_depth(&self) -> f32 { + self.trunk_depth + } + pub fn set_trunk_depth(&mut self, value: f32) { + self.trunk_depth = value; + } + pub fn branch_length(&self) -> f32 { + self.branch_length + } + pub fn set_branch_length(&mut self, value: f32) { + self.branch_length = value; + } + pub fn trunk_length(&self) -> f32 { + self.trunk_length + } + pub fn set_trunk_length(&mut self, value: f32) { + self.trunk_length = value; + } + pub fn leaf_scale(&self) -> f32 { + self.leaf_scale + } + pub fn set_leaf_scale(&mut self, value: f32) { + self.leaf_scale = value; + } + pub fn billboard_scale(&self) -> f32 { + self.billboard_scale + } + pub fn set_billboard_scale(&mut self, value: f32) { + self.billboard_scale = value; + } + pub fn billboard_ratio(&self) -> f32 { + self.billboard_ratio + } + pub fn set_billboard_ratio(&mut self, value: f32) { + self.billboard_ratio = value; + } + pub fn trunk_aspect(&self) -> f32 { + self.trunk_aspect + } + pub fn set_trunk_aspect(&mut self, value: f32) { + self.trunk_aspect = value; + } + pub fn branch_aspect(&self) -> f32 { + self.branch_aspect + } + pub fn set_branch_aspect(&mut self, value: f32) { + self.branch_aspect = value; + } + pub fn leaf_rotate(&self) -> f32 { + self.leaf_rotate + } + pub fn set_leaf_rotate(&mut self, value: f32) { + self.leaf_rotate = value; + } + pub fn noise_mag(&self) -> f32 { + self.noise_mag + } + pub fn set_noise_mag(&mut self, value: f32) { + self.noise_mag = value; + } + pub fn noise_scale(&self) -> f32 { + self.noise_scale + } + pub fn set_noise_scale(&mut self, value: f32) { + self.noise_scale = value; + } + pub fn taper(&self) -> f32 { + self.taper + } + pub fn set_taper(&mut self, value: f32) { + self.taper = value; + } + pub fn depth(&self) -> i32 { + self.depth + } + pub fn set_depth(&mut self, value: i32) { + self.depth = value; + } + pub fn repeat_z(&self) -> i32 { + self.repeat_z + } + pub fn set_repeat_z(&mut self, value: i32) { + self.repeat_z = value; + } +} +fn generated_trees() -> &'static [TreeDefinition] { + static TREES: OnceLock> = OnceLock::new(); + TREES + .get_or_init(|| { + vec![ + TreeDefinition { name : "Pine 1".to_owned(), species_id : 0, texture_id : + libremetaverse_types::UUID::parse("0187babf-6c0d-5891-ebed-4ecab1426683" + .to_owned()).expect("validated tree UUID"), droop : 60.0_f32, twist : + 5.0_f32, branches : 5.0_f32, depth : 1, scale_step : 0.7_f32, trunk_depth + : 6.0_f32, branch_length : 8.0_f32, trunk_length : 11.5_f32, leaf_scale : + 22.0_f32, billboard_scale : 39.5_f32, billboard_ratio : 1.1_f32, + trunk_aspect : 0.1_f32, branch_aspect : 0.05_f32, leaf_rotate : 20.0_f32, + noise_mag : 0.5_f32, noise_scale : 2.5_f32, taper : 0.8_f32, repeat_z : 3 + }, TreeDefinition { name : "Oak".to_owned(), species_id : 1, texture_id : + libremetaverse_types::UUID::parse("8a515889-eac9-fb55-8eba-d2dc09eb32c8" + .to_owned()).expect("validated tree UUID"), droop : 35.0_f32, twist : + 3.0_f32, branches : 4.0_f32, depth : 3, scale_step : 0.7_f32, trunk_depth + : 0.0_f32, branch_length : 3.0_f32, trunk_length : 3.8_f32, leaf_scale : + 7.0_f32, billboard_scale : 10.25_f32, billboard_ratio : 1.0_f32, + trunk_aspect : 0.15_f32, branch_aspect : 0.07_f32, leaf_rotate : 0.0_f32, + noise_mag : 1.2_f32, noise_scale : 4.0_f32, taper : 0.3_f32, repeat_z : 4 + }, TreeDefinition { name : "Tropical Bush 1".to_owned(), species_id : 2, + texture_id : + libremetaverse_types::UUID::parse("5bc11cd6-2f40-071e-a8da-0903394204f9" + .to_owned()).expect("validated tree UUID"), droop : 10.0_f32, twist : + 0.0_f32, branches : 6.0_f32, depth : 1, scale_step : 0.5_f32, trunk_depth + : 1.0_f32, branch_length : 0.5_f32, trunk_length : 0.15_f32, leaf_scale : + 7.5_f32, billboard_scale : 5.0_f32, billboard_ratio : 1.25_f32, + trunk_aspect : 1.0_f32, branch_aspect : 0.08_f32, leaf_rotate : 0.0_f32, + noise_mag : 1.0_f32, noise_scale : 1.0_f32, taper : 0.2_f32, repeat_z : 1 + }, TreeDefinition { name : "Palm 1".to_owned(), species_id : 3, + texture_id : + libremetaverse_types::UUID::parse("ca4e8c27-473c-eb1c-2f5d-50ee3f07d85c" + .to_owned()).expect("validated tree UUID"), droop : 0.0_f32, twist : + 0.0_f32, branches : 3.0_f32, depth : 1, scale_step : 0.5_f32, trunk_depth + : 0.0_f32, branch_length : 0.7_f32, trunk_length : 9.0_f32, leaf_scale : + 10.0_f32, billboard_scale : 13.25_f32, billboard_ratio : 1.0_f32, + trunk_aspect : 0.035_f32, branch_aspect : 0.03_f32, leaf_rotate : + 0.0_f32, noise_mag : 0.2_f32, noise_scale : 6.0_f32, taper : 0.7_f32, + repeat_z : 10 }, TreeDefinition { name : "Dogwood".to_owned(), species_id + : 4, texture_id : + libremetaverse_types::UUID::parse("64367bd1-697e-b3e6-0b65-3f862a577366" + .to_owned()).expect("validated tree UUID"), droop : 30.0_f32, twist : + 0.0_f32, branches : 3.0_f32, depth : 2, scale_step : 0.7_f32, trunk_depth + : 1.0_f32, branch_length : 2.75_f32, trunk_length : 4.0_f32, leaf_scale : + 5.5_f32, billboard_scale : 10.0_f32, billboard_ratio : 1.0_f32, + trunk_aspect : 0.06_f32, branch_aspect : 0.05_f32, leaf_rotate : 0.0_f32, + noise_mag : 1.5_f32, noise_scale : 2.0_f32, taper : 0.8_f32, repeat_z : 3 + }, TreeDefinition { name : "Tropical Bush 2".to_owned(), species_id : 5, + texture_id : + libremetaverse_types::UUID::parse("cdd9a9fc-6d0b-f90d-8416-c72b6019bca8" + .to_owned()).expect("validated tree UUID"), droop : 10.0_f32, twist : + 0.0_f32, branches : 3.0_f32, depth : 1, scale_step : 0.5_f32, trunk_depth + : 1.0_f32, branch_length : 0.5_f32, trunk_length : 0.15_f32, leaf_scale : + 6.0_f32, billboard_scale : 4.5_f32, billboard_ratio : 0.9_f32, + trunk_aspect : 1.0_f32, branch_aspect : 0.08_f32, leaf_rotate : 0.0_f32, + noise_mag : 1.0_f32, noise_scale : 1.0_f32, taper : 0.2_f32, repeat_z : 1 + }, TreeDefinition { name : "Palm 2".to_owned(), species_id : 6, + texture_id : + libremetaverse_types::UUID::parse("2d784476-d0db-9979-0cff-9408745a7cf3" + .to_owned()).expect("validated tree UUID"), droop : 0.0_f32, twist : + 0.0_f32, branches : 3.0_f32, depth : 1, scale_step : 0.5_f32, trunk_depth + : 0.0_f32, branch_length : 0.7_f32, trunk_length : 10.0_f32, leaf_scale : + 7.5_f32, billboard_scale : 13.5_f32, billboard_ratio : 1.0_f32, + trunk_aspect : 0.035_f32, branch_aspect : 0.03_f32, leaf_rotate : + 0.0_f32, noise_mag : 0.2_f32, noise_scale : 6.0_f32, taper : 0.6_f32, + repeat_z : 12 }, TreeDefinition { name : "Cypress 1".to_owned(), + species_id : 7, texture_id : + libremetaverse_types::UUID::parse("fb2ae204-3fd1-df33-594f-c9f882830e66" + .to_owned()).expect("validated tree UUID"), droop : 30.0_f32, twist : + 0.0_f32, branches : 3.0_f32, depth : 4, scale_step : 0.5_f32, trunk_depth + : 0.0_f32, branch_length : 10.0_f32, trunk_length : 10.0_f32, leaf_scale + : 70.0_f32, billboard_scale : 22.5_f32, billboard_ratio : 1.0_f32, + trunk_aspect : 0.05_f32, branch_aspect : 0.03_f32, leaf_rotate : 0.0_f32, + noise_mag : 1.2_f32, noise_scale : 1.0_f32, taper : 0.5_f32, repeat_z : 6 + }, TreeDefinition { name : "Cypress 2".to_owned(), species_id : 8, + texture_id : + libremetaverse_types::UUID::parse("30047cec-269d-408e-0c30-b2603b887268" + .to_owned()).expect("validated tree UUID"), droop : 30.0_f32, twist : + 0.0_f32, branches : 3.0_f32, depth : 4, scale_step : 0.6_f32, trunk_depth + : 3.0_f32, branch_length : 7.5_f32, trunk_length : 10.0_f32, leaf_scale : + 35.0_f32, billboard_scale : 25.0_f32, billboard_ratio : 0.8_f32, + trunk_aspect : 0.05_f32, branch_aspect : 0.04_f32, leaf_rotate : 0.0_f32, + noise_mag : 1.2_f32, noise_scale : 1.0_f32, taper : 0.5_f32, repeat_z : 5 + }, TreeDefinition { name : "Pine 2".to_owned(), species_id : 9, + texture_id : + libremetaverse_types::UUID::parse("d691a01c-13b7-578d-57c0-5caef0b4e7e1" + .to_owned()).expect("validated tree UUID"), droop : 50.0_f32, twist : + 7.5_f32, branches : 4.0_f32, depth : 2, scale_step : 0.7_f32, trunk_depth + : 6.0_f32, branch_length : 6.0_f32, trunk_length : 10.0_f32, leaf_scale : + 15.5_f32, billboard_scale : 33.0_f32, billboard_ratio : 1.35_f32, + trunk_aspect : 0.1_f32, branch_aspect : 0.08_f32, leaf_rotate : 5.0_f32, + noise_mag : 0.5_f32, noise_scale : 2.5_f32, taper : 0.7_f32, repeat_z : 3 + }, TreeDefinition { name : "Plumeria".to_owned(), species_id : 10, + texture_id : + libremetaverse_types::UUID::parse("6de37e4e-7029-61f5-54b8-f5e63f983f58" + .to_owned()).expect("validated tree UUID"), droop : 8.0_f32, twist : + 7.0_f32, branches : 3.0_f32, depth : 2, scale_step : 0.6_f32, trunk_depth + : 0.0_f32, branch_length : 3.0_f32, trunk_length : 0.1_f32, leaf_scale : + 20.0_f32, billboard_scale : 10.0_f32, billboard_ratio : 1.35_f32, + trunk_aspect : 0.1_f32, branch_aspect : 0.075_f32, leaf_rotate : 0.0_f32, + noise_mag : 0.0_f32, noise_scale : 0.0_f32, taper : 0.85_f32, repeat_z : + 2 }, TreeDefinition { name : "Winter Pine 1".to_owned(), species_id : 11, + texture_id : + libremetaverse_types::UUID::parse("10d2a01a-0818-84b9-4b96-c2eb63256519" + .to_owned()).expect("validated tree UUID"), droop : 90.0_f32, twist : + 2.5_f32, branches : 6.0_f32, depth : 1, scale_step : 0.66_f32, + trunk_depth : 8.0_f32, branch_length : 0.0_f32, trunk_length : 4.0_f32, + leaf_scale : 6.75_f32, billboard_scale : 12.5_f32, billboard_ratio : + 0.6_f32, trunk_aspect : 0.1_f32, branch_aspect : 0.05_f32, leaf_rotate : + 0.0_f32, noise_mag : 0.0_f32, noise_scale : 2.5_f32, taper : 0.85_f32, + repeat_z : 2 }, TreeDefinition { name : "Winter Aspen".to_owned(), + species_id : 12, texture_id : + libremetaverse_types::UUID::parse("7c0cf89b-44b1-1ce2-dd74-07102a98ac2a" + .to_owned()).expect("validated tree UUID"), droop : 85.0_f32, twist : + 3.0_f32, branches : 5.0_f32, depth : 1, scale_step : 0.6_f32, trunk_depth + : 8.0_f32, branch_length : 3.0_f32, trunk_length : 4.5_f32, leaf_scale : + 8.0_f32, billboard_scale : 12.0_f32, billboard_ratio : 0.675_f32, + trunk_aspect : 0.06_f32, branch_aspect : 0.05_f32, leaf_rotate : 0.0_f32, + noise_mag : 0.75_f32, noise_scale : 2.5_f32, taper : 0.8_f32, repeat_z : + 2 }, TreeDefinition { name : "Winter Pine 2".to_owned(), species_id : 13, + texture_id : + libremetaverse_types::UUID::parse("67931331-0c02-4876-1255-28770896c6a2" + .to_owned()).expect("validated tree UUID"), droop : 140.0_f32, twist : + 5.0_f32, branches : 6.0_f32, depth : 1, scale_step : 0.6_f32, trunk_depth + : 7.0_f32, branch_length : 0.0_f32, trunk_length : 3.0_f32, leaf_scale : + 5.0_f32, billboard_scale : 7.5_f32, billboard_ratio : 0.5_f32, + trunk_aspect : 0.1_f32, branch_aspect : 0.05_f32, leaf_rotate : 0.0_f32, + noise_mag : 0.75_f32, noise_scale : 2.5_f32, taper : 0.5_f32, repeat_z : + 2 }, TreeDefinition { name : "Eucalyptus".to_owned(), species_id : 14, + texture_id : + libremetaverse_types::UUID::parse("a6162133-724b-54df-a12f-51cd070ad6f3" + .to_owned()).expect("validated tree UUID"), droop : 20.0_f32, twist : + 5.0_f32, branches : 3.6_f32, depth : 4, scale_step : 0.6_f32, trunk_depth + : 0.0_f32, branch_length : 12.0_f32, trunk_length : 8.0_f32, leaf_scale : + 33.0_f32, billboard_scale : 24.0_f32, billboard_ratio : 1.3_f32, + trunk_aspect : 0.15_f32, branch_aspect : 0.08_f32, leaf_rotate : 0.0_f32, + noise_mag : 0.0_f32, noise_scale : 0.0_f32, taper : 0.675_f32, repeat_z : + 3 }, TreeDefinition { name : "Fern".to_owned(), species_id : 15, + texture_id : + libremetaverse_types::UUID::parse("8872f2b8-31db-42d8-580a-b3e4a91262de" + .to_owned()).expect("validated tree UUID"), droop : 12.0_f32, twist : + 0.0_f32, branches : 7.0_f32, depth : 1, scale_step : 0.5_f32, trunk_depth + : 0.1_f32, branch_length : 0.01_f32, trunk_length : 0.0_f32, leaf_scale : + 4.0_f32, billboard_scale : 3.5_f32, billboard_ratio : 0.85_f32, + trunk_aspect : 1.0_f32, branch_aspect : 0.08_f32, leaf_rotate : 0.0_f32, + noise_mag : 1.0_f32, noise_scale : 1.0_f32, taper : 0.2_f32, repeat_z : 1 + }, TreeDefinition { name : "Eelgrass".to_owned(), species_id : 16, + texture_id : + libremetaverse_types::UUID::parse("96b4de31-f4fa-337d-ec78-451e3609769e" + .to_owned()).expect("validated tree UUID"), droop : 0.0_f32, twist : + 0.0_f32, branches : 5.0_f32, depth : 1, scale_step : 0.5_f32, trunk_depth + : 1.0_f32, branch_length : 0.5_f32, trunk_length : 0.15_f32, leaf_scale : + 5.0_f32, billboard_scale : 3.0_f32, billboard_ratio : 1.0_f32, + trunk_aspect : 1.0_f32, branch_aspect : 0.08_f32, leaf_rotate : 0.0_f32, + noise_mag : 1.0_f32, noise_scale : 1.0_f32, taper : 0.2_f32, repeat_z : 1 + }, TreeDefinition { name : "Sea Sword".to_owned(), species_id : 17, + texture_id : + libremetaverse_types::UUID::parse("5894e2e7-ab8d-edfa-e61c-18cf16854ba3" + .to_owned()).expect("validated tree UUID"), droop : 0.0_f32, twist : + 0.0_f32, branches : 6.0_f32, depth : 1, scale_step : 0.7_f32, trunk_depth + : 1.0_f32, branch_length : 0.0_f32, trunk_length : 0.0_f32, leaf_scale : + 2.0_f32, billboard_scale : 2.0_f32, billboard_ratio : 1.0_f32, + trunk_aspect : 1.0_f32, branch_aspect : 1.0_f32, leaf_rotate : 0.0_f32, + noise_mag : 0.5_f32, noise_scale : 0.0_f32, taper : 0.0_f32, repeat_z : 1 + }, TreeDefinition { name : "Kelp 1".to_owned(), species_id : 18, + texture_id : + libremetaverse_types::UUID::parse("2caf1179-7861-6ff3-4b7d-46e17780bdfa" + .to_owned()).expect("validated tree UUID"), droop : - 15.0_f32, twist : + 0.0_f32, branches : 1.0_f32, depth : 1, scale_step : 1.0_f32, trunk_depth + : 3.0_f32, branch_length : 2.5_f32, trunk_length : 0.75_f32, leaf_scale : + 1.85_f32, billboard_scale : 4.9_f32, billboard_ratio : 1.0_f32, + trunk_aspect : 0.04_f32, branch_aspect : 0.05_f32, leaf_rotate : 0.0_f32, + noise_mag : 1.0_f32, noise_scale : 2.0_f32, taper : 0.8_f32, repeat_z : 2 + }, TreeDefinition { name : "Beach Grass 1".to_owned(), species_id : 19, + texture_id : + libremetaverse_types::UUID::parse("18fb888b-e8f1-dce7-7da7-321d651ea6b0" + .to_owned()).expect("validated tree UUID"), droop : 0.0_f32, twist : + 0.0_f32, branches : 4.0_f32, depth : 1, scale_step : 0.7_f32, trunk_depth + : 1.0_f32, branch_length : 0.0_f32, trunk_length : 0.0_f32, leaf_scale : + 4.0_f32, billboard_scale : 2.5_f32, billboard_ratio : 1.2_f32, + trunk_aspect : 1.0_f32, branch_aspect : 1.0_f32, leaf_rotate : 0.0_f32, + noise_mag : 0.5_f32, noise_scale : 0.0_f32, taper : 0.0_f32, repeat_z : 1 + }, TreeDefinition { name : "Kelp 2".to_owned(), species_id : 20, + texture_id : + libremetaverse_types::UUID::parse("2a4880b6-b7a3-690a-2049-bfbe38eafb9f" + .to_owned()).expect("validated tree UUID"), droop : - 15.0_f32, twist : + 0.0_f32, branches : 1.0_f32, depth : 1, scale_step : 1.0_f32, trunk_depth + : 3.0_f32, branch_length : 2.5_f32, trunk_length : 1.35_f32, leaf_scale : + 2.0_f32, billboard_scale : 4.9_f32, billboard_ratio : 1.0_f32, + trunk_aspect : 0.025_f32, branch_aspect : 0.05_f32, leaf_rotate : + 0.0_f32, noise_mag : 1.0_f32, noise_scale : 2.0_f32, taper : 0.8_f32, + repeat_z : 2 }, + ] + }) + .as_slice() +} +pub struct TreeDefinitions; +impl TreeDefinitions { + pub fn all() -> Vec { + generated_trees().to_vec() + } + pub fn get(species: crate::Tree) -> Result { + generated_trees().get(species as usize).cloned().ok_or(crate::Error::Argument) + } +} +#[derive(Clone, Debug, PartialEq)] +pub struct GrassDefinition { + name: String, + species_id: i32, + texture_id: libremetaverse_types::UUID, + blade_size_x: f32, + blade_size_y: f32, +} +impl GrassDefinition { + pub fn name(&self) -> String { + self.name.clone() + } + pub fn set_name(&mut self, value: String) { + self.name = value; + } + pub fn species_id(&self) -> i32 { + self.species_id + } + pub fn set_species_id(&mut self, value: i32) { + self.species_id = value; + } + pub fn texture_id(&self) -> libremetaverse_types::UUID { + self.texture_id + } + pub fn set_texture_id(&mut self, value: libremetaverse_types::UUID) { + self.texture_id = value; + } + pub fn blade_size_x(&self) -> f32 { + self.blade_size_x + } + pub fn set_blade_size_x(&mut self, value: f32) { + self.blade_size_x = value; + } + pub fn blade_size_y(&self) -> f32 { + self.blade_size_y + } + pub fn set_blade_size_y(&mut self, value: f32) { + self.blade_size_y = value; + } +} +fn generated_grasses() -> &'static [GrassDefinition] { + static GRASSES: OnceLock> = OnceLock::new(); + GRASSES + .get_or_init(|| { + vec![ + GrassDefinition { name : "Grass 0".to_owned(), species_id : 0, texture_id + : + libremetaverse_types::UUID::parse("6c4727b8-ac79-ba44-3b81-f9aa887b47eb" + .to_owned()).expect("validated grass UUID"), blade_size_x : 1.35_f32, + blade_size_y : 1.35_f32 }, GrassDefinition { name : "Grass 1".to_owned(), + species_id : 1, texture_id : + libremetaverse_types::UUID::parse("79504bf5-c3ec-0763-6563-d843de66d0a1" + .to_owned()).expect("validated grass UUID"), blade_size_x : 1.0_f32, + blade_size_y : 0.66_f32 }, GrassDefinition { name : "Grass 2".to_owned(), + species_id : 2, texture_id : + libremetaverse_types::UUID::parse("6c4727b8-ac79-ba44-3b81-f9aa887b47eb" + .to_owned()).expect("validated grass UUID"), blade_size_x : 1.8_f32, + blade_size_y : 1.8_f32 }, GrassDefinition { name : "Grass 3".to_owned(), + species_id : 3, texture_id : + libremetaverse_types::UUID::parse("99bd60a2-3250-efc9-2e39-2fbcadefbecc" + .to_owned()).expect("validated grass UUID"), blade_size_x : 1.0_f32, + blade_size_y : 1.0_f32 }, GrassDefinition { name : "Grass 4".to_owned(), + species_id : 4, texture_id : + libremetaverse_types::UUID::parse("7a2b3a4a-53c2-53ac-5716-aac7d743c020" + .to_owned()).expect("validated grass UUID"), blade_size_x : 2.25_f32, + blade_size_y : 2.25_f32 }, GrassDefinition { name : "undergrowth_1" + .to_owned(), species_id : 5, texture_id : + libremetaverse_types::UUID::parse("8f458549-173b-23ff-d4ff-bfaa5ea2371b" + .to_owned()).expect("validated grass UUID"), blade_size_x : 2.0_f32, + blade_size_y : 2.0_f32 }, + ] + }) + .as_slice() +} +pub struct GrassDefinitions; +impl GrassDefinitions { + pub fn all() -> Vec { + generated_grasses().to_vec() + } + pub fn get(species: crate::Grass) -> Result { + grass_by_id(species as u8) + } +} +pub(crate) fn grass_by_id(species: u8) -> Result { + generated_grasses().get(usize::from(species)).cloned().ok_or(crate::Error::Argument) +} +#[cfg(test)] +mod tests { + use super::*; + #[test] + fn golden_foliage_shape_and_values() { + let trees = TreeDefinitions::all(); + assert_eq!(trees.len(), 21); + assert_eq!(trees[0].name(), "Pine 1"); + assert_eq!(trees[0].species_id(), crate ::Tree::Pine1 as i32); + assert_eq!(trees[20].name(), "Kelp 2"); + assert_eq!(TreeDefinitions::get(crate ::Tree::Oak).unwrap(), trees[1]); + let grass = GrassDefinitions::all(); + assert_eq!(grass.len(), 6); + assert_eq!(grass[5].name(), "undergrowth_1"); + assert_eq!( + GrassDefinitions::get(crate ::Grass::Undergrowth1).unwrap(), grass[5] + ); + } +} diff --git a/crates/libremetaverse/src/generated.rs b/crates/libremetaverse/src/generated.rs index ba9fa6d..2983773 100644 --- a/crates/libremetaverse/src/generated.rs +++ b/crates/libremetaverse/src/generated.rs @@ -5500,13 +5500,15 @@ pub struct Avatar { impl Avatar { /// C# member: `M:LibreMetaverse.Avatar.#ctor`. pub fn new() -> Result { - libremetaverse_types::not_implemented("M:LibreMetaverse.Avatar.#ctor") + crate::visual_catalog::new_avatar() } /// C# member: `M:LibreMetaverse.Avatar.DecodeVisualParams`. pub fn decode_visual_params( &self, ) -> Result, crate::Error> { - libremetaverse_types::not_implemented("M:LibreMetaverse.Avatar.DecodeVisualParams") + Ok(crate::visual_catalog::decode_visual_params( + &self.visual_parameters, + )) } /// C# member: `M:LibreMetaverse.Avatar.FromOSD(LibreMetaverse.StructuredData.OSD)`. pub fn from_osd( @@ -5745,7 +5747,9 @@ impl AvatarAnimationEventArgs { } /// C# type: `T:LibreMetaverse.AvatarAppearanceEventArgs`. -pub struct AvatarAppearanceEventArgs; +pub struct AvatarAppearanceEventArgs { + stored_visual_params: Vec, +} impl AvatarAppearanceEventArgs { /// C# member: `M:LibreMetaverse.AvatarAppearanceEventArgs.#ctor(LibreMetaverse.Simulator,LibreMetaverse.UUID,System.Boolean,LibreMetaverse.Primitive.TextureEntryFace,LibreMetaverse.Primitive.TextureEntryFace[],System.Collections.Generic.List{System.Byte},System.Byte,System.Int32,LibreMetaverse.AppearanceFlags,System.Int32)`. pub fn new( @@ -5760,17 +5764,17 @@ impl AvatarAppearanceEventArgs { appearance_flags: libremetaverse::AppearanceFlags, child_count: i32, ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.AvatarAppearanceEventArgs.#ctor(LibreMetaverse.Simulator,LibreMetaverse.UUID,System.Boolean,LibreMetaverse.Primitive.TextureEntryFace,LibreMetaverse.Primitive.TextureEntryFace[],System.Collections.Generic.List{System.Byte},System.Byte,System.Int32,LibreMetaverse.AppearanceFlags,System.Int32)", - ) + Ok(Self { + stored_visual_params: visual_params, + }) } /// C# member: `M:LibreMetaverse.AvatarAppearanceEventArgs.DecodeVisualParams`. pub fn decode_visual_params( &self, ) -> Result, crate::Error> { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.AvatarAppearanceEventArgs.DecodeVisualParams", - ) + Ok(crate::visual_catalog::decode_visual_params( + &self.stored_visual_params, + )) } /// C# member: `P:LibreMetaverse.AvatarAppearanceEventArgs.AppearanceFlags`. pub fn appearance_flags(&self) -> libremetaverse::AppearanceFlags { @@ -5828,9 +5832,7 @@ impl AvatarAppearanceEventArgs { } /// C# member: `P:LibreMetaverse.AvatarAppearanceEventArgs.VisualParams`. pub fn visual_params(&self) -> Vec { - libremetaverse_types::unimplemented_api!( - "P:LibreMetaverse.AvatarAppearanceEventArgs.VisualParams" - ) + self.stored_visual_params.clone() } } @@ -8952,35 +8954,14 @@ impl DisposalHelperDisposalGuard { } /// C# type: `T:LibreMetaverse.DrivenParamInfo`. -pub struct DrivenParamInfo { - /// C# member: `F:LibreMetaverse.DrivenParamInfo.HasRange`. - pub has_range: bool, - /// C# member: `F:LibreMetaverse.DrivenParamInfo.Max1`. - pub max1: f32, - /// C# member: `F:LibreMetaverse.DrivenParamInfo.Max2`. - pub max2: f32, - /// C# member: `F:LibreMetaverse.DrivenParamInfo.Min1`. - pub min1: f32, - /// C# member: `F:LibreMetaverse.DrivenParamInfo.Min2`. - pub min2: f32, - /// C# member: `F:LibreMetaverse.DrivenParamInfo.ParamID`. - pub param_id: i32, -} -impl DrivenParamInfo { - /// C# member: `M:LibreMetaverse.DrivenParamInfo.#ctor(System.Int32,System.Single,System.Single,System.Single,System.Single,System.Boolean)`. - pub fn new( - param_id: i32, - min1: f32, - max1: f32, - max2: f32, - min2: f32, - has_range: bool, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.DrivenParamInfo.#ctor(System.Int32,System.Single,System.Single,System.Single,System.Single,System.Boolean)", - ) - } -} +/// C# member: `F:LibreMetaverse.DrivenParamInfo.HasRange`. +/// C# member: `F:LibreMetaverse.DrivenParamInfo.Max1`. +/// C# member: `F:LibreMetaverse.DrivenParamInfo.Max2`. +/// C# member: `F:LibreMetaverse.DrivenParamInfo.Min1`. +/// C# member: `F:LibreMetaverse.DrivenParamInfo.Min2`. +/// C# member: `F:LibreMetaverse.DrivenParamInfo.ParamID`. +/// C# member: `M:LibreMetaverse.DrivenParamInfo.#ctor(System.Int32,System.Single,System.Single,System.Single,System.Single,System.Boolean)`. +pub use crate::visual_catalog::DrivenParamInfo; /// C# type: `T:LibreMetaverse.EffectType`. #[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)] @@ -11054,66 +11035,17 @@ pub enum Grass { } /// C# type: `T:LibreMetaverse.GrassDefinition`. -pub struct GrassDefinition; -impl GrassDefinition { - /// C# member: `P:LibreMetaverse.GrassDefinition.BladeSizeX`. - pub fn blade_size_x(&self) -> f32 { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.GrassDefinition.BladeSizeX") - } - /// Setter for C# member: `P:LibreMetaverse.GrassDefinition.BladeSizeX`. - pub fn set_blade_size_x(&mut self, value: f32) { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.GrassDefinition.BladeSizeX") - } - /// C# member: `P:LibreMetaverse.GrassDefinition.BladeSizeY`. - pub fn blade_size_y(&self) -> f32 { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.GrassDefinition.BladeSizeY") - } - /// Setter for C# member: `P:LibreMetaverse.GrassDefinition.BladeSizeY`. - pub fn set_blade_size_y(&mut self, value: f32) { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.GrassDefinition.BladeSizeY") - } - /// C# member: `P:LibreMetaverse.GrassDefinition.Name`. - pub fn name(&self) -> String { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.GrassDefinition.Name") - } - /// Setter for C# member: `P:LibreMetaverse.GrassDefinition.Name`. - pub fn set_name(&mut self, value: String) { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.GrassDefinition.Name") - } - /// C# member: `P:LibreMetaverse.GrassDefinition.SpeciesId`. - pub fn species_id(&self) -> i32 { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.GrassDefinition.SpeciesId") - } - /// Setter for C# member: `P:LibreMetaverse.GrassDefinition.SpeciesId`. - pub fn set_species_id(&mut self, value: i32) { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.GrassDefinition.SpeciesId") - } - /// C# member: `P:LibreMetaverse.GrassDefinition.TextureId`. - pub fn texture_id(&self) -> libremetaverse_types::UUID { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.GrassDefinition.TextureId") - } - /// Setter for C# member: `P:LibreMetaverse.GrassDefinition.TextureId`. - pub fn set_texture_id(&mut self, value: libremetaverse_types::UUID) { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.GrassDefinition.TextureId") - } -} +/// C# member: `P:LibreMetaverse.GrassDefinition.BladeSizeX`. +/// C# member: `P:LibreMetaverse.GrassDefinition.BladeSizeY`. +/// C# member: `P:LibreMetaverse.GrassDefinition.Name`. +/// C# member: `P:LibreMetaverse.GrassDefinition.SpeciesId`. +/// C# member: `P:LibreMetaverse.GrassDefinition.TextureId`. +pub use crate::foliage_catalog::GrassDefinition; /// C# type: `T:LibreMetaverse.GrassDefinitions`. -pub struct GrassDefinitions; -impl GrassDefinitions { - /// C# member: `F:LibreMetaverse.GrassDefinitions.All`. - pub fn all() -> Vec { - libremetaverse_types::unimplemented_api!("F:LibreMetaverse.GrassDefinitions.All") - } - /// C# member: `M:LibreMetaverse.GrassDefinitions.Get(LibreMetaverse.Grass)`. - pub fn get( - species: libremetaverse::Grass, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.GrassDefinitions.Get(LibreMetaverse.Grass)", - ) - } -} +/// C# member: `F:LibreMetaverse.GrassDefinitions.All`. +/// C# member: `M:LibreMetaverse.GrassDefinitions.Get(LibreMetaverse.Grass)`. +pub use crate::foliage_catalog::GrassDefinitions; /// C# type: `T:LibreMetaverse.GridClient`. pub struct GridClient; @@ -23556,7 +23488,7 @@ impl Primitive { } /// C# member: `M:LibreMetaverse.Primitive.GetGrassDefinition`. pub fn get_grass_definition(&self) -> Result { - libremetaverse_types::not_implemented("M:LibreMetaverse.Primitive.GetGrassDefinition") + crate::foliage_catalog::grass_by_id(self.prim_data.state) } /// C# member: `M:LibreMetaverse.Primitive.GetHashCode`. pub fn get_hash_code(&self) -> i32 { @@ -23568,7 +23500,7 @@ impl Primitive { } /// C# member: `M:LibreMetaverse.Primitive.GetTreeDefinition`. pub fn get_tree_definition(&self) -> Result { - libremetaverse_types::not_implemented("M:LibreMetaverse.Primitive.GetTreeDefinition") + crate::foliage_catalog::TreeDefinitions::get(self.tree_species) } /// C# member: `M:LibreMetaverse.Primitive.PackBeginCut(System.Single)`. pub fn pack_begin_cut(begin_cut: f32) -> Result { @@ -24550,9 +24482,7 @@ impl PrimitiveTextureEntryFace { pub fn new( default_texture: Option, ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.Primitive.TextureEntryFace.#ctor(LibreMetaverse.Primitive.TextureEntryFace)", - ) + crate::visual_catalog::new_texture_entry_face() } /// C# member: `M:LibreMetaverse.Primitive.TextureEntryFace.Clone`. pub fn clone(&self) -> Result { @@ -26641,29 +26571,12 @@ impl SimulatorFeatures { } /// C# type: `T:LibreMetaverse.SkeletalBoneInfo`. -pub struct SkeletalBoneInfo { - /// C# member: `F:LibreMetaverse.SkeletalBoneInfo.BoneName`. - pub bone_name: String, - /// C# member: `F:LibreMetaverse.SkeletalBoneInfo.HasPositionDeformation`. - pub has_position_deformation: bool, - /// C# member: `F:LibreMetaverse.SkeletalBoneInfo.PositionDeformation`. - pub position_deformation: libremetaverse_types::Vector3, - /// C# member: `F:LibreMetaverse.SkeletalBoneInfo.ScaleDeformation`. - pub scale_deformation: libremetaverse_types::Vector3, -} -impl SkeletalBoneInfo { - /// C# member: `M:LibreMetaverse.SkeletalBoneInfo.#ctor(System.String,LibreMetaverse.Vector3,LibreMetaverse.Vector3,System.Boolean)`. - pub fn new( - bone_name: String, - scale_deformation: libremetaverse_types::Vector3, - position_deformation: libremetaverse_types::Vector3, - has_position_deformation: bool, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.SkeletalBoneInfo.#ctor(System.String,LibreMetaverse.Vector3,LibreMetaverse.Vector3,System.Boolean)", - ) - } -} +/// C# member: `F:LibreMetaverse.SkeletalBoneInfo.BoneName`. +/// C# member: `F:LibreMetaverse.SkeletalBoneInfo.HasPositionDeformation`. +/// C# member: `F:LibreMetaverse.SkeletalBoneInfo.PositionDeformation`. +/// C# member: `F:LibreMetaverse.SkeletalBoneInfo.ScaleDeformation`. +/// C# member: `M:LibreMetaverse.SkeletalBoneInfo.#ctor(System.String,LibreMetaverse.Vector3,LibreMetaverse.Vector3,System.Boolean)`. +pub use crate::visual_catalog::SkeletalBoneInfo; /// C# type: `T:LibreMetaverse.SlappCommand`. #[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)] @@ -28134,194 +28047,33 @@ pub enum Tree { } /// C# type: `T:LibreMetaverse.TreeDefinition`. -pub struct TreeDefinition; -impl TreeDefinition { - /// C# member: `P:LibreMetaverse.TreeDefinition.BillboardRatio`. - pub fn billboard_ratio(&self) -> f32 { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.BillboardRatio") - } - /// Setter for C# member: `P:LibreMetaverse.TreeDefinition.BillboardRatio`. - pub fn set_billboard_ratio(&mut self, value: f32) { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.BillboardRatio") - } - /// C# member: `P:LibreMetaverse.TreeDefinition.BillboardScale`. - pub fn billboard_scale(&self) -> f32 { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.BillboardScale") - } - /// Setter for C# member: `P:LibreMetaverse.TreeDefinition.BillboardScale`. - pub fn set_billboard_scale(&mut self, value: f32) { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.BillboardScale") - } - /// C# member: `P:LibreMetaverse.TreeDefinition.BranchAspect`. - pub fn branch_aspect(&self) -> f32 { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.BranchAspect") - } - /// Setter for C# member: `P:LibreMetaverse.TreeDefinition.BranchAspect`. - pub fn set_branch_aspect(&mut self, value: f32) { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.BranchAspect") - } - /// C# member: `P:LibreMetaverse.TreeDefinition.BranchLength`. - pub fn branch_length(&self) -> f32 { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.BranchLength") - } - /// Setter for C# member: `P:LibreMetaverse.TreeDefinition.BranchLength`. - pub fn set_branch_length(&mut self, value: f32) { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.BranchLength") - } - /// C# member: `P:LibreMetaverse.TreeDefinition.Branches`. - pub fn branches(&self) -> f32 { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.Branches") - } - /// Setter for C# member: `P:LibreMetaverse.TreeDefinition.Branches`. - pub fn set_branches(&mut self, value: f32) { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.Branches") - } - /// C# member: `P:LibreMetaverse.TreeDefinition.Depth`. - pub fn depth(&self) -> i32 { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.Depth") - } - /// Setter for C# member: `P:LibreMetaverse.TreeDefinition.Depth`. - pub fn set_depth(&mut self, value: i32) { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.Depth") - } - /// C# member: `P:LibreMetaverse.TreeDefinition.Droop`. - pub fn droop(&self) -> f32 { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.Droop") - } - /// Setter for C# member: `P:LibreMetaverse.TreeDefinition.Droop`. - pub fn set_droop(&mut self, value: f32) { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.Droop") - } - /// C# member: `P:LibreMetaverse.TreeDefinition.LeafRotate`. - pub fn leaf_rotate(&self) -> f32 { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.LeafRotate") - } - /// Setter for C# member: `P:LibreMetaverse.TreeDefinition.LeafRotate`. - pub fn set_leaf_rotate(&mut self, value: f32) { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.LeafRotate") - } - /// C# member: `P:LibreMetaverse.TreeDefinition.LeafScale`. - pub fn leaf_scale(&self) -> f32 { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.LeafScale") - } - /// Setter for C# member: `P:LibreMetaverse.TreeDefinition.LeafScale`. - pub fn set_leaf_scale(&mut self, value: f32) { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.LeafScale") - } - /// C# member: `P:LibreMetaverse.TreeDefinition.Name`. - pub fn name(&self) -> String { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.Name") - } - /// Setter for C# member: `P:LibreMetaverse.TreeDefinition.Name`. - pub fn set_name(&mut self, value: String) { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.Name") - } - /// C# member: `P:LibreMetaverse.TreeDefinition.NoiseMag`. - pub fn noise_mag(&self) -> f32 { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.NoiseMag") - } - /// Setter for C# member: `P:LibreMetaverse.TreeDefinition.NoiseMag`. - pub fn set_noise_mag(&mut self, value: f32) { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.NoiseMag") - } - /// C# member: `P:LibreMetaverse.TreeDefinition.NoiseScale`. - pub fn noise_scale(&self) -> f32 { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.NoiseScale") - } - /// Setter for C# member: `P:LibreMetaverse.TreeDefinition.NoiseScale`. - pub fn set_noise_scale(&mut self, value: f32) { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.NoiseScale") - } - /// C# member: `P:LibreMetaverse.TreeDefinition.RepeatZ`. - pub fn repeat_z(&self) -> i32 { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.RepeatZ") - } - /// Setter for C# member: `P:LibreMetaverse.TreeDefinition.RepeatZ`. - pub fn set_repeat_z(&mut self, value: i32) { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.RepeatZ") - } - /// C# member: `P:LibreMetaverse.TreeDefinition.ScaleStep`. - pub fn scale_step(&self) -> f32 { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.ScaleStep") - } - /// Setter for C# member: `P:LibreMetaverse.TreeDefinition.ScaleStep`. - pub fn set_scale_step(&mut self, value: f32) { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.ScaleStep") - } - /// C# member: `P:LibreMetaverse.TreeDefinition.SpeciesId`. - pub fn species_id(&self) -> i32 { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.SpeciesId") - } - /// Setter for C# member: `P:LibreMetaverse.TreeDefinition.SpeciesId`. - pub fn set_species_id(&mut self, value: i32) { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.SpeciesId") - } - /// C# member: `P:LibreMetaverse.TreeDefinition.Taper`. - pub fn taper(&self) -> f32 { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.Taper") - } - /// Setter for C# member: `P:LibreMetaverse.TreeDefinition.Taper`. - pub fn set_taper(&mut self, value: f32) { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.Taper") - } - /// C# member: `P:LibreMetaverse.TreeDefinition.TextureId`. - pub fn texture_id(&self) -> libremetaverse_types::UUID { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.TextureId") - } - /// Setter for C# member: `P:LibreMetaverse.TreeDefinition.TextureId`. - pub fn set_texture_id(&mut self, value: libremetaverse_types::UUID) { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.TextureId") - } - /// C# member: `P:LibreMetaverse.TreeDefinition.TrunkAspect`. - pub fn trunk_aspect(&self) -> f32 { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.TrunkAspect") - } - /// Setter for C# member: `P:LibreMetaverse.TreeDefinition.TrunkAspect`. - pub fn set_trunk_aspect(&mut self, value: f32) { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.TrunkAspect") - } - /// C# member: `P:LibreMetaverse.TreeDefinition.TrunkDepth`. - pub fn trunk_depth(&self) -> f32 { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.TrunkDepth") - } - /// Setter for C# member: `P:LibreMetaverse.TreeDefinition.TrunkDepth`. - pub fn set_trunk_depth(&mut self, value: f32) { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.TrunkDepth") - } - /// C# member: `P:LibreMetaverse.TreeDefinition.TrunkLength`. - pub fn trunk_length(&self) -> f32 { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.TrunkLength") - } - /// Setter for C# member: `P:LibreMetaverse.TreeDefinition.TrunkLength`. - pub fn set_trunk_length(&mut self, value: f32) { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.TrunkLength") - } - /// C# member: `P:LibreMetaverse.TreeDefinition.Twist`. - pub fn twist(&self) -> f32 { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.Twist") - } - /// Setter for C# member: `P:LibreMetaverse.TreeDefinition.Twist`. - pub fn set_twist(&mut self, value: f32) { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.Twist") - } -} +/// C# member: `P:LibreMetaverse.TreeDefinition.BillboardRatio`. +/// C# member: `P:LibreMetaverse.TreeDefinition.BillboardScale`. +/// C# member: `P:LibreMetaverse.TreeDefinition.BranchAspect`. +/// C# member: `P:LibreMetaverse.TreeDefinition.BranchLength`. +/// C# member: `P:LibreMetaverse.TreeDefinition.Branches`. +/// C# member: `P:LibreMetaverse.TreeDefinition.Depth`. +/// C# member: `P:LibreMetaverse.TreeDefinition.Droop`. +/// C# member: `P:LibreMetaverse.TreeDefinition.LeafRotate`. +/// C# member: `P:LibreMetaverse.TreeDefinition.LeafScale`. +/// C# member: `P:LibreMetaverse.TreeDefinition.Name`. +/// C# member: `P:LibreMetaverse.TreeDefinition.NoiseMag`. +/// C# member: `P:LibreMetaverse.TreeDefinition.NoiseScale`. +/// C# member: `P:LibreMetaverse.TreeDefinition.RepeatZ`. +/// C# member: `P:LibreMetaverse.TreeDefinition.ScaleStep`. +/// C# member: `P:LibreMetaverse.TreeDefinition.SpeciesId`. +/// C# member: `P:LibreMetaverse.TreeDefinition.Taper`. +/// C# member: `P:LibreMetaverse.TreeDefinition.TextureId`. +/// C# member: `P:LibreMetaverse.TreeDefinition.TrunkAspect`. +/// C# member: `P:LibreMetaverse.TreeDefinition.TrunkDepth`. +/// C# member: `P:LibreMetaverse.TreeDefinition.TrunkLength`. +/// C# member: `P:LibreMetaverse.TreeDefinition.Twist`. +pub use crate::foliage_catalog::TreeDefinition; /// C# type: `T:LibreMetaverse.TreeDefinitions`. -pub struct TreeDefinitions; -impl TreeDefinitions { - /// C# member: `F:LibreMetaverse.TreeDefinitions.All`. - pub fn all() -> Vec { - libremetaverse_types::unimplemented_api!("F:LibreMetaverse.TreeDefinitions.All") - } - /// C# member: `M:LibreMetaverse.TreeDefinitions.Get(LibreMetaverse.Tree)`. - pub fn get( - species: libremetaverse::Tree, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.TreeDefinitions.Get(LibreMetaverse.Tree)", - ) - } -} +/// C# member: `F:LibreMetaverse.TreeDefinitions.All`. +/// C# member: `M:LibreMetaverse.TreeDefinitions.Get(LibreMetaverse.Tree)`. +pub use crate::foliage_catalog::TreeDefinitions; /// C# type: `T:LibreMetaverse.UDPBase`. pub struct UDPBase; @@ -28652,29 +28404,12 @@ pub enum ViewerUriType { } /// C# type: `T:LibreMetaverse.VisualAlphaParam`. -pub struct VisualAlphaParam { - /// C# member: `F:LibreMetaverse.VisualAlphaParam.Domain`. - pub domain: f32, - /// C# member: `F:LibreMetaverse.VisualAlphaParam.MultiplyBlend`. - pub multiply_blend: bool, - /// C# member: `F:LibreMetaverse.VisualAlphaParam.SkipIfZero`. - pub skip_if_zero: bool, - /// C# member: `F:LibreMetaverse.VisualAlphaParam.TGAFile`. - pub tga_file: String, -} -impl VisualAlphaParam { - /// C# member: `M:LibreMetaverse.VisualAlphaParam.#ctor(System.Single,System.String,System.Boolean,System.Boolean)`. - pub fn new( - domain: f32, - tga_file: String, - skip_if_zero: bool, - multiply_blend: bool, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.VisualAlphaParam.#ctor(System.Single,System.String,System.Boolean,System.Boolean)", - ) - } -} +/// C# member: `F:LibreMetaverse.VisualAlphaParam.Domain`. +/// C# member: `F:LibreMetaverse.VisualAlphaParam.MultiplyBlend`. +/// C# member: `F:LibreMetaverse.VisualAlphaParam.SkipIfZero`. +/// C# member: `F:LibreMetaverse.VisualAlphaParam.TGAFile`. +/// C# member: `M:LibreMetaverse.VisualAlphaParam.#ctor(System.Single,System.String,System.Boolean,System.Boolean)`. +pub use crate::visual_catalog::VisualAlphaParam; /// C# type: `T:LibreMetaverse.VisualColorOperation`. #[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)] @@ -28689,137 +28424,46 @@ pub enum VisualColorOperation { } /// C# type: `T:LibreMetaverse.VisualColorParam`. -pub struct VisualColorParam { - /// C# member: `F:LibreMetaverse.VisualColorParam.Colors`. - pub colors: Vec, - /// C# member: `F:LibreMetaverse.VisualColorParam.Operation`. - pub operation: libremetaverse::VisualColorOperation, -} -impl VisualColorParam { - /// C# member: `M:LibreMetaverse.VisualColorParam.#ctor(LibreMetaverse.VisualColorOperation,LibreMetaverse.Color4[])`. - pub fn new( - operation: libremetaverse::VisualColorOperation, - colors: Vec, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.VisualColorParam.#ctor(LibreMetaverse.VisualColorOperation,LibreMetaverse.Color4[])", - ) - } -} +/// C# member: `F:LibreMetaverse.VisualColorParam.Colors`. +/// C# member: `F:LibreMetaverse.VisualColorParam.Operation`. +/// C# member: `M:LibreMetaverse.VisualColorParam.#ctor(LibreMetaverse.VisualColorOperation,LibreMetaverse.Color4[])`. +pub use crate::visual_catalog::VisualColorParam; /// C# type: `T:LibreMetaverse.VisualParam`. -pub struct VisualParam { - /// C# member: `F:LibreMetaverse.VisualParam.AlphaParams`. - pub alpha_params: Option>, - /// C# member: `F:LibreMetaverse.VisualParam.ColorParams`. - pub color_params: Option>, - /// C# member: `F:LibreMetaverse.VisualParam.DefaultValue`. - pub default_value: f32, - /// C# member: `F:LibreMetaverse.VisualParam.DrivenParams`. - pub driven_params: Option>, - /// C# member: `F:LibreMetaverse.VisualParam.Drivers`. - pub drivers: Option>, - /// C# member: `F:LibreMetaverse.VisualParam.Group`. - pub group: i32, - /// C# member: `F:LibreMetaverse.VisualParam.IsBumpAttribute`. - pub is_bump_attribute: bool, - /// C# member: `F:LibreMetaverse.VisualParam.Label`. - pub label: String, - /// C# member: `F:LibreMetaverse.VisualParam.LabelMax`. - pub label_max: String, - /// C# member: `F:LibreMetaverse.VisualParam.LabelMin`. - pub label_min: String, - /// C# member: `F:LibreMetaverse.VisualParam.MaxValue`. - pub max_value: f32, - /// C# member: `F:LibreMetaverse.VisualParam.MinValue`. - pub min_value: f32, - /// C# member: `F:LibreMetaverse.VisualParam.Name`. - pub name: String, - /// C# member: `F:LibreMetaverse.VisualParam.ParamID`. - pub param_id: i32, - /// C# member: `F:LibreMetaverse.VisualParam.SkeletalDistortions`. - pub skeletal_distortions: Option>, - /// C# member: `F:LibreMetaverse.VisualParam.VolumeMorphs`. - pub volume_morphs: Option>, - /// C# member: `F:LibreMetaverse.VisualParam.Wearable`. - pub wearable: Option, -} -impl VisualParam { - /// C# member: `M:LibreMetaverse.VisualParam.#ctor(System.Int32,System.String,System.Int32,System.String,System.String,System.String,System.String,System.Single,System.Single,System.Single,System.Boolean,System.Int32[],System.Nullable{LibreMetaverse.VisualAlphaParam},System.Nullable{LibreMetaverse.VisualColorParam},LibreMetaverse.DrivenParamInfo[],LibreMetaverse.SkeletalBoneInfo[],LibreMetaverse.VolumeMorphInfo[])`. - pub fn new( - param_id: i32, - name: String, - group: i32, - wearable: Option, - label: String, - label_min: String, - label_max: String, - def_: f32, - min: f32, - max: f32, - is_bump_attribute: bool, - drivers: Option>, - alpha: Option>, - color_params: Option>, - driven_params: Option>, - skeletal_distortions: Option>, - volume_morphs: Option>, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.VisualParam.#ctor(System.Int32,System.String,System.Int32,System.String,System.String,System.String,System.String,System.Single,System.Single,System.Single,System.Boolean,System.Int32[],System.Nullable{LibreMetaverse.VisualAlphaParam},System.Nullable{LibreMetaverse.VisualColorParam},LibreMetaverse.DrivenParamInfo[],LibreMetaverse.SkeletalBoneInfo[],LibreMetaverse.VolumeMorphInfo[])", - ) - } -} +/// C# member: `F:LibreMetaverse.VisualParam.AlphaParams`. +/// C# member: `F:LibreMetaverse.VisualParam.ColorParams`. +/// C# member: `F:LibreMetaverse.VisualParam.DefaultValue`. +/// C# member: `F:LibreMetaverse.VisualParam.DrivenParams`. +/// C# member: `F:LibreMetaverse.VisualParam.Drivers`. +/// C# member: `F:LibreMetaverse.VisualParam.Group`. +/// C# member: `F:LibreMetaverse.VisualParam.IsBumpAttribute`. +/// C# member: `F:LibreMetaverse.VisualParam.Label`. +/// C# member: `F:LibreMetaverse.VisualParam.LabelMax`. +/// C# member: `F:LibreMetaverse.VisualParam.LabelMin`. +/// C# member: `F:LibreMetaverse.VisualParam.MaxValue`. +/// C# member: `F:LibreMetaverse.VisualParam.MinValue`. +/// C# member: `F:LibreMetaverse.VisualParam.Name`. +/// C# member: `F:LibreMetaverse.VisualParam.ParamID`. +/// C# member: `F:LibreMetaverse.VisualParam.SkeletalDistortions`. +/// C# member: `F:LibreMetaverse.VisualParam.VolumeMorphs`. +/// C# member: `F:LibreMetaverse.VisualParam.Wearable`. +/// C# member: `M:LibreMetaverse.VisualParam.#ctor(System.Int32,System.String,System.Int32,System.String,System.String,System.String,System.String,System.Single,System.Single,System.Single,System.Boolean,System.Int32[],System.Nullable{LibreMetaverse.VisualAlphaParam},System.Nullable{LibreMetaverse.VisualColorParam},LibreMetaverse.DrivenParamInfo[],LibreMetaverse.SkeletalBoneInfo[],LibreMetaverse.VolumeMorphInfo[])`. +pub use crate::visual_catalog::VisualParam; /// C# type: `T:LibreMetaverse.VisualParams`. -pub struct VisualParams; -impl VisualParams { - /// C# member: `F:LibreMetaverse.VisualParams.Group0ParamIds`. - pub fn group0_param_ids() -> Vec { - libremetaverse_types::unimplemented_api!("F:LibreMetaverse.VisualParams.Group0ParamIds") - } - /// C# member: `F:LibreMetaverse.VisualParams.Params`. - pub fn params() -> libremetaverse_types::compat::SortedList { - libremetaverse_types::unimplemented_api!("F:LibreMetaverse.VisualParams.Params") - } - /// C# member: `M:LibreMetaverse.VisualParams.Find(System.String,System.String)`. - pub fn find( - name: String, - wearable: Option, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.VisualParams.Find(System.String,System.String)", - ) - } -} +/// C# member: `F:LibreMetaverse.VisualParams.Group0ParamIds`. +/// C# member: `F:LibreMetaverse.VisualParams.Params`. +/// C# member: `M:LibreMetaverse.VisualParams.Find(System.String,System.String)`. +pub use crate::visual_catalog::VisualParams; /// C# type: `T:LibreMetaverse.VolumeMorphInfo`. -pub struct VolumeMorphInfo { - /// C# member: `F:LibreMetaverse.VolumeMorphInfo.BoneName`. - pub bone_name: String, - /// C# member: `F:LibreMetaverse.VolumeMorphInfo.HasPosition`. - pub has_position: bool, - /// C# member: `F:LibreMetaverse.VolumeMorphInfo.HasScale`. - pub has_scale: bool, - /// C# member: `F:LibreMetaverse.VolumeMorphInfo.PositionDelta`. - pub position_delta: libremetaverse_types::Vector3, - /// C# member: `F:LibreMetaverse.VolumeMorphInfo.ScaleDelta`. - pub scale_delta: libremetaverse_types::Vector3, -} -impl VolumeMorphInfo { - /// C# member: `M:LibreMetaverse.VolumeMorphInfo.#ctor(System.String,LibreMetaverse.Vector3,System.Boolean,LibreMetaverse.Vector3,System.Boolean)`. - pub fn new( - bone_name: String, - scale_delta: libremetaverse_types::Vector3, - has_scale: bool, - position_delta: libremetaverse_types::Vector3, - has_position: bool, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.VolumeMorphInfo.#ctor(System.String,LibreMetaverse.Vector3,System.Boolean,LibreMetaverse.Vector3,System.Boolean)", - ) - } -} +/// C# member: `F:LibreMetaverse.VolumeMorphInfo.BoneName`. +/// C# member: `F:LibreMetaverse.VolumeMorphInfo.HasPosition`. +/// C# member: `F:LibreMetaverse.VolumeMorphInfo.HasScale`. +/// C# member: `F:LibreMetaverse.VolumeMorphInfo.PositionDelta`. +/// C# member: `F:LibreMetaverse.VolumeMorphInfo.ScaleDelta`. +/// C# member: `M:LibreMetaverse.VolumeMorphInfo.#ctor(System.String,LibreMetaverse.Vector3,System.Boolean,LibreMetaverse.Vector3,System.Boolean)`. +pub use crate::visual_catalog::VolumeMorphInfo; /// C# type: `T:LibreMetaverse.Vote`. pub struct Vote { diff --git a/crates/libremetaverse/src/lib.rs b/crates/libremetaverse/src/lib.rs index 1d0195b..c4946b0 100644 --- a/crates/libremetaverse/src/lib.rs +++ b/crates/libremetaverse/src/lib.rs @@ -3,6 +3,8 @@ extern crate self as libremetaverse; mod bit_pack; +#[rustfmt::skip] // Deterministic machine output is formatted by the pinned generator. +mod foliage_catalog; mod generated; mod j2k; mod message_codec; @@ -10,6 +12,8 @@ mod message_codec; pub mod packet_catalog; mod packet_wire; mod targa; +#[rustfmt::skip] // Deterministic machine output is formatted by the pinned generator. +mod visual_catalog; #[cfg(test)] mod appearance_baker_semantics; diff --git a/crates/libremetaverse/src/visual_catalog.rs b/crates/libremetaverse/src/visual_catalog.rs new file mode 100644 index 0000000..a4f2731 --- /dev/null +++ b/crates/libremetaverse/src/visual_catalog.rs @@ -0,0 +1,23378 @@ +// @generated by libremetaverse-codegen; DO NOT EDIT. +// Regenerate: cargo run -p libremetaverse-codegen -- generate +// Generator: visual-params +// Source: codegen/inputs/avatar_lad.xml sha256=6f97a1408fa8f0ab5c09043da433c701701fe075e8a97867fcbcda207adf9eaf license=BSD-3-Clause + +#![allow( + clippy::float_cmp, + clippy::manual_string_new, + clippy::missing_errors_doc, + clippy::must_use_candidate, + clippy::needless_pass_by_value, + clippy::too_many_lines, + clippy::unnecessary_wraps +)] +use std::collections::{BTreeMap, HashMap}; +use std::sync::OnceLock; +#[derive(Clone, Debug, PartialEq)] +pub struct VisualAlphaParam { + pub domain: f32, + pub multiply_blend: bool, + pub skip_if_zero: bool, + pub tga_file: String, +} +impl VisualAlphaParam { + pub fn new( + domain: f32, + tga_file: String, + skip_if_zero: bool, + multiply_blend: bool, + ) -> Result { + Ok(Self { + domain, + multiply_blend, + skip_if_zero, + tga_file, + }) + } +} +#[derive(Clone, Debug, PartialEq)] +pub struct VisualColorParam { + pub colors: Vec, + pub operation: crate::VisualColorOperation, +} +impl VisualColorParam { + pub fn new( + operation: crate::VisualColorOperation, + colors: Vec, + ) -> Result { + Ok(Self { colors, operation }) + } +} +#[derive(Clone, Debug, PartialEq)] +pub struct DrivenParamInfo { + pub has_range: bool, + pub max1: f32, + pub max2: f32, + pub min1: f32, + pub min2: f32, + pub param_id: i32, +} +impl DrivenParamInfo { + pub fn new( + param_id: i32, + min1: f32, + max1: f32, + max2: f32, + min2: f32, + has_range: bool, + ) -> Result { + Ok(Self { + has_range, + max1, + max2, + min1, + min2, + param_id, + }) + } +} +#[derive(Clone, Debug, PartialEq)] +pub struct SkeletalBoneInfo { + pub bone_name: String, + pub has_position_deformation: bool, + pub position_deformation: libremetaverse_types::Vector3, + pub scale_deformation: libremetaverse_types::Vector3, +} +impl SkeletalBoneInfo { + pub fn new( + bone_name: String, + scale_deformation: libremetaverse_types::Vector3, + position_deformation: libremetaverse_types::Vector3, + has_position_deformation: bool, + ) -> Result { + Ok(Self { + bone_name, + has_position_deformation, + position_deformation, + scale_deformation, + }) + } +} +#[derive(Clone, Debug, PartialEq)] +pub struct VolumeMorphInfo { + pub bone_name: String, + pub has_position: bool, + pub has_scale: bool, + pub position_delta: libremetaverse_types::Vector3, + pub scale_delta: libremetaverse_types::Vector3, +} +impl VolumeMorphInfo { + pub fn new( + bone_name: String, + scale_delta: libremetaverse_types::Vector3, + has_scale: bool, + position_delta: libremetaverse_types::Vector3, + has_position: bool, + ) -> Result { + Ok(Self { + bone_name, + has_position, + has_scale, + position_delta, + scale_delta, + }) + } +} +#[derive(Clone, Debug, PartialEq)] +pub struct VisualParam { + pub alpha_params: Option>, + pub color_params: Option>, + pub default_value: f32, + pub driven_params: Option>, + pub drivers: Option>, + pub group: i32, + pub is_bump_attribute: bool, + pub label: String, + pub label_max: String, + pub label_min: String, + pub max_value: f32, + pub min_value: f32, + pub name: String, + pub param_id: i32, + pub skeletal_distortions: Option>, + pub volume_morphs: Option>, + pub wearable: Option, +} +impl Default for VisualParam { + fn default() -> Self { + Self { + alpha_params: None, + color_params: None, + default_value: 0.0, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: String::new(), + label_max: String::new(), + label_min: String::new(), + max_value: 0.0, + min_value: 0.0, + name: String::new(), + param_id: 0, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + } + } +} +impl VisualParam { + #[allow(clippy::too_many_arguments)] + pub fn new( + param_id: i32, + name: String, + group: i32, + wearable: Option, + label: String, + label_min: String, + label_max: String, + def_: f32, + min: f32, + max: f32, + is_bump_attribute: bool, + drivers: Option>, + alpha: Option>, + color_params: Option>, + driven_params: Option>, + skeletal_distortions: Option>, + volume_morphs: Option>, + ) -> Result { + Ok(Self { + alpha_params: alpha, + color_params, + default_value: def_, + driven_params, + drivers, + group, + is_bump_attribute, + label, + label_max, + label_min, + max_value: max, + min_value: min, + name, + param_id, + skeletal_distortions, + volume_morphs, + wearable, + }) + } +} +const GROUP0_PARAM_IDS: &[i32] = &[ + 1, 2, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, + 27, 31, 33, 34, 35, 36, 37, 38, 80, 93, 98, 99, 105, 108, 110, 111, 112, 113, 114, + 115, 116, 117, 119, 130, 131, 132, 133, 134, 135, 136, 137, 140, 141, 142, 143, 150, + 155, 157, 162, 163, 165, 166, 167, 168, 169, 177, 181, 182, 183, 184, 185, 192, 193, + 196, 198, 503, 505, 506, 507, 508, 513, 514, 515, 517, 518, 603, 604, 605, 606, 607, + 608, 609, 616, 617, 619, 624, 625, 629, 637, 638, 646, 647, 649, 650, 652, 653, 654, + 656, 659, 662, 663, 664, 665, 674, 675, 676, 678, 682, 683, 684, 685, 690, 692, 693, + 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 750, + 752, 753, 754, 755, 756, 757, 758, 759, 760, 762, 763, 764, 765, 769, 773, 775, 779, + 780, 781, 785, 789, 795, 796, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 812, + 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, + 830, 834, 835, 836, 840, 841, 842, 844, 848, 858, 859, 860, 861, 862, 863, 868, 869, + 877, 879, 880, 921, 922, 923, 10000, 10001, 10002, 10003, 10004, 10005, 10006, 10007, + 10008, 10009, 10010, 10011, 10012, 10013, 10014, 10015, 10016, 10017, 10018, 10019, + 10020, 10021, 10022, 10023, 10024, 10025, 10026, 10027, 10028, 10029, 10030, 10031, + 10032, 11000, 11001, +]; +fn generated_params() -> &'static BTreeMap { + static PARAMS: OnceLock> = OnceLock::new(); + PARAMS + .get_or_init(|| { + let mut params = BTreeMap::new(); + params + .insert( + 1, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 20001 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 30001 } + ], + ), + drivers: Some(vec![20001, 30001]), + group: 0, + is_bump_attribute: false, + label: "Brow Size".to_owned(), + label_max: "Large".to_owned(), + label_min: "Small".to_owned(), + max_value: 2.0_f32, + min_value: -0.3_f32, + name: "Big_Brow".to_owned(), + param_id: 1, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 2, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 20002 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 30002 } + ], + ), + drivers: Some(vec![20002, 30002]), + group: 0, + is_bump_attribute: false, + label: "Nose Size".to_owned(), + label_max: "Large".to_owned(), + label_min: "Small".to_owned(), + max_value: 2.5_f32, + min_value: -0.8_f32, + name: "Nose_Big_Out".to_owned(), + param_id: 2, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 4, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 20004 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 30004 } + ], + ), + drivers: Some(vec![20004, 30004]), + group: 0, + is_bump_attribute: false, + label: "Nostril Width".to_owned(), + label_max: "Broad".to_owned(), + label_min: "Narrow".to_owned(), + max_value: 1.0_f32, + min_value: -0.5_f32, + name: "Broad_Nostrils".to_owned(), + param_id: 4, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 5, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "Chin Cleft".to_owned(), + label_max: "Cleft".to_owned(), + label_min: "Round".to_owned(), + max_value: 1.0_f32, + min_value: -0.1_f32, + name: "Cleft_Chin".to_owned(), + param_id: 5, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 6, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 20006 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 30006 } + ], + ), + drivers: Some(vec![20006, 30006]), + group: 0, + is_bump_attribute: false, + label: "Nose Tip Shape".to_owned(), + label_max: "Bulbous".to_owned(), + label_min: "Pointy".to_owned(), + max_value: 1.0_f32, + min_value: -0.3_f32, + name: "Bulbous_Nose_Tip".to_owned(), + param_id: 6, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 7, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 20007 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 30007 } + ], + ), + drivers: Some(vec![20007, 30007]), + group: 0, + is_bump_attribute: false, + label: "Chin Angle".to_owned(), + label_max: "Chin In".to_owned(), + label_min: "Chin Out".to_owned(), + max_value: 0.5_f32, + min_value: -0.5_f32, + name: "Weak_Chin".to_owned(), + param_id: 7, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 8, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 20008 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 30008 } + ], + ), + drivers: Some(vec![20008, 30008]), + group: 0, + is_bump_attribute: false, + label: "Chin-Neck".to_owned(), + label_max: "Double Chin".to_owned(), + label_min: "Tight Chin".to_owned(), + max_value: 1.5_f32, + min_value: -0.5_f32, + name: "Double_Chin".to_owned(), + param_id: 8, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 10, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 20010 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 30010 } + ], + ), + drivers: Some(vec![20010, 30010]), + group: 0, + is_bump_attribute: false, + label: "Lower Cheeks".to_owned(), + label_max: "Sunken".to_owned(), + label_min: "Well-Fed".to_owned(), + max_value: 3.0_f32, + min_value: -1.5_f32, + name: "Sunken_Cheeks".to_owned(), + param_id: 10, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 11, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 20011 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 30011 } + ], + ), + drivers: Some(vec![20011, 30011]), + group: 0, + is_bump_attribute: false, + label: "Upper Bridge".to_owned(), + label_max: "High".to_owned(), + label_min: "Low".to_owned(), + max_value: 1.5_f32, + min_value: -0.5_f32, + name: "Noble_Nose_Bridge".to_owned(), + param_id: 11, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 12, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "More".to_owned(), + label_min: "Less".to_owned(), + max_value: 2.5_f32, + min_value: -0.5_f32, + name: "Jowls".to_owned(), + param_id: 12, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 13, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "Upper Chin Cleft".to_owned(), + label_max: "Cleft".to_owned(), + label_min: "Round".to_owned(), + max_value: 1.5_f32, + min_value: 0.0_f32, + name: "Cleft_Chin_Upper".to_owned(), + param_id: 13, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 14, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 20014 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 30014 } + ], + ), + drivers: Some(vec![20014, 30014]), + group: 0, + is_bump_attribute: false, + label: "Cheek Bones".to_owned(), + label_max: "High".to_owned(), + label_min: "Low".to_owned(), + max_value: 1.0_f32, + min_value: -0.5_f32, + name: "High_Cheek_Bones".to_owned(), + param_id: 14, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 15, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 20015 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 30015 } + ], + ), + drivers: Some(vec![20015, 30015]), + group: 0, + is_bump_attribute: false, + label: "Ear Angle".to_owned(), + label_max: "Out".to_owned(), + label_min: "In".to_owned(), + max_value: 1.5_f32, + min_value: -0.5_f32, + name: "Ears_Out".to_owned(), + param_id: 15, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 16, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 870 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 30016 } + ], + ), + drivers: Some(vec![870, 30016]), + group: 0, + is_bump_attribute: false, + label: "Eyebrow Points".to_owned(), + label_max: "Pointy".to_owned(), + label_min: "Smooth".to_owned(), + max_value: 3.0_f32, + min_value: -0.5_f32, + name: "Pointy_Eyebrows".to_owned(), + param_id: 16, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 17, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 20017 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 30017 } + ], + ), + drivers: Some(vec![20017, 30017]), + group: 0, + is_bump_attribute: false, + label: "Jaw Shape".to_owned(), + label_max: "Square".to_owned(), + label_min: "Pointy".to_owned(), + max_value: 1.0_f32, + min_value: -0.5_f32, + name: "Square_Jaw".to_owned(), + param_id: 17, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 18, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 20018 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 30018 } + ], + ), + drivers: Some(vec![20018, 30018]), + group: 0, + is_bump_attribute: false, + label: "Upper Cheeks".to_owned(), + label_max: "Puffy".to_owned(), + label_min: "Thin".to_owned(), + max_value: 2.5_f32, + min_value: -1.5_f32, + name: "Puffy_Upper_Cheeks".to_owned(), + param_id: 18, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 19, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 20019 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 30019 } + ], + ), + drivers: Some(vec![20019, 30019]), + group: 0, + is_bump_attribute: false, + label: "Nose Tip Angle".to_owned(), + label_max: "Upturned".to_owned(), + label_min: "Downturned".to_owned(), + max_value: 1.0_f32, + min_value: -1.5_f32, + name: "Upturned_Nose_Tip".to_owned(), + param_id: 19, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 20, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 20020 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 30020 } + ], + ), + drivers: Some(vec![20020, 30020]), + group: 0, + is_bump_attribute: false, + label: "Nose Thickness".to_owned(), + label_max: "Bulbous Nose".to_owned(), + label_min: "Thin Nose".to_owned(), + max_value: 1.5_f32, + min_value: -0.5_f32, + name: "Bulbous_Nose".to_owned(), + param_id: 20, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 21, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 20021 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 30021 } + ], + ), + drivers: Some(vec![20021, 30021]), + group: 0, + is_bump_attribute: false, + label: "Upper Eyelid Fold".to_owned(), + label_max: "Creased".to_owned(), + label_min: "Uncreased".to_owned(), + max_value: 1.3_f32, + min_value: -0.2_f32, + name: "Upper_Eyelid_Fold".to_owned(), + param_id: 21, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 22, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "Attached Earlobes".to_owned(), + label_max: "Attached".to_owned(), + label_min: "Unattached".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Attached_Earlobes".to_owned(), + param_id: 22, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 23, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 20023 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 30023 } + ], + ), + drivers: Some(vec![20023, 30023]), + group: 0, + is_bump_attribute: false, + label: "Eye Bags".to_owned(), + label_max: "Baggy".to_owned(), + label_min: "Smooth".to_owned(), + max_value: 1.5_f32, + min_value: -0.5_f32, + name: "Baggy_Eyes".to_owned(), + param_id: 23, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 24, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 20024 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 30024 } + ], + ), + drivers: Some(vec![20024, 30024]), + group: 0, + is_bump_attribute: false, + label: "Eye Opening".to_owned(), + label_max: "Wide".to_owned(), + label_min: "Narrow".to_owned(), + max_value: 2.0_f32, + min_value: -1.5_f32, + name: "Wide_Eyes".to_owned(), + param_id: 24, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 25, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 20025 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 30025 } + ], + ), + drivers: Some(vec![20025, 30025]), + group: 0, + is_bump_attribute: false, + label: "Lip Cleft".to_owned(), + label_max: "Wide".to_owned(), + label_min: "Narrow".to_owned(), + max_value: 1.5_f32, + min_value: -0.8_f32, + name: "Wide_Lip_Cleft".to_owned(), + param_id: 25, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 26, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 0.7_f32, + min_value: 0.0_f32, + name: "Lips_Thin".to_owned(), + param_id: 26, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 27, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 20027 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 30027 } + ], + ), + drivers: Some(vec![20027, 30027]), + group: 0, + is_bump_attribute: false, + label: "Bridge Width".to_owned(), + label_max: "Wide".to_owned(), + label_min: "Narrow".to_owned(), + max_value: 1.2_f32, + min_value: -1.3_f32, + name: "Wide_Nose_Bridge".to_owned(), + param_id: 27, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 28, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 2.0_f32, + min_value: 0.0_f32, + name: "Lips_Fat".to_owned(), + param_id: 28, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 29, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.3_f32, + min_value: -0.7_f32, + name: "Wide_Upper_Lip".to_owned(), + param_id: 29, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 30, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.3_f32, + min_value: -0.7_f32, + name: "Wide_Lower_Lip".to_owned(), + param_id: 30, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 31, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.5_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 872 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 30031 } + ], + ), + drivers: Some(vec![872, 30031]), + group: 0, + is_bump_attribute: false, + label: "Eyebrow Arc".to_owned(), + label_max: "Arced".to_owned(), + label_min: "Flat".to_owned(), + max_value: 2.0_f32, + min_value: 0.0_f32, + name: "Arced_Eyebrows".to_owned(), + param_id: 31, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 32, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Male".to_owned(), + label_min: "Female".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Male_Skeleton".to_owned(), + param_id: 32, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mNeck".to_owned(), + has_position_deformation : false, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.2_f32 } }, SkeletalBoneInfo { bone_name : "mCollarLeft" + .to_owned(), has_position_deformation : false, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.4_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : "mCollarRight" + .to_owned(), has_position_deformation : false, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.4_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mShoulderLeft".to_owned(), has_position_deformation : + false, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.35_f32, + z : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mShoulderRight".to_owned(), has_position_deformation : + false, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.35_f32, + z : 0.0_f32 } }, SkeletalBoneInfo { bone_name : "mElbowLeft" + .to_owned(), has_position_deformation : false, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.1_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : "mElbowRight" + .to_owned(), has_position_deformation : false, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.1_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : "mChest" + .to_owned(), has_position_deformation : false, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.05_f32, y : 0.05_f32, + z : 0.05_f32 } }, SkeletalBoneInfo { bone_name : "mTorso" + .to_owned(), has_position_deformation : false, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.05_f32 } }, SkeletalBoneInfo { bone_name : "mSpine3" + .to_owned(), has_position_deformation : false, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.05_f32 } }, SkeletalBoneInfo { bone_name : "mSpine4" + .to_owned(), has_position_deformation : false, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.05_f32 } }, SkeletalBoneInfo { bone_name : "mHipLeft" + .to_owned(), has_position_deformation : false, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.05_f32, y : 0.05_f32, + z : 0.0_f32 } }, SkeletalBoneInfo { bone_name : "mHipRight" + .to_owned(), has_position_deformation : false, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.05_f32, y : 0.05_f32, + z : 0.0_f32 } }, SkeletalBoneInfo { bone_name : "mKneeLeft" + .to_owned(), has_position_deformation : false, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.05_f32, y : 0.05_f32, + z : 0.1_f32 } }, SkeletalBoneInfo { bone_name : "mKneeRight" + .to_owned(), has_position_deformation : false, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.05_f32, y : 0.05_f32, + z : 0.1_f32 } }, SkeletalBoneInfo { bone_name : + "mHindLimb1Left".to_owned(), has_position_deformation : + false, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.05_f32, y : + 0.05_f32, z : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mHindLimb1Right".to_owned(), has_position_deformation : + false, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.05_f32, y : + 0.05_f32, z : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mHindLimb2Left".to_owned(), has_position_deformation : + false, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.05_f32, y : + 0.05_f32, z : 0.1_f32 } }, SkeletalBoneInfo { bone_name : + "mHindLimb2Right".to_owned(), has_position_deformation : + false, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.05_f32, y : + 0.05_f32, z : 0.1_f32 } }, SkeletalBoneInfo { bone_name : + "mWingsRoot".to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : "mWing1Right" + .to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : - + 0.05_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : "mWing1Left" + .to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : - + 0.05_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } } + ], + ), + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 33, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "Height".to_owned(), + label_max: "Tall".to_owned(), + label_min: "Short".to_owned(), + max_value: 2.0_f32, + min_value: -2.3_f32, + name: "Height".to_owned(), + param_id: 33, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mNeck".to_owned(), + has_position_deformation : false, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.02_f32 } }, SkeletalBoneInfo { bone_name : "mCollarLeft" + .to_owned(), has_position_deformation : false, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : "mCollarRight" + .to_owned(), has_position_deformation : false, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mShoulderLeft".to_owned(), has_position_deformation : + false, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.08_f32, + z : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mShoulderRight".to_owned(), has_position_deformation : + false, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.08_f32, + z : 0.0_f32 } }, SkeletalBoneInfo { bone_name : "mElbowLeft" + .to_owned(), has_position_deformation : false, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.06_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : "mElbowRight" + .to_owned(), has_position_deformation : false, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.06_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : "mChest" + .to_owned(), has_position_deformation : false, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.05_f32 } }, SkeletalBoneInfo { bone_name : "mTorso" + .to_owned(), has_position_deformation : false, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.05_f32 } }, SkeletalBoneInfo { bone_name : "mSpine3" + .to_owned(), has_position_deformation : false, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.05_f32 } }, SkeletalBoneInfo { bone_name : "mSpine4" + .to_owned(), has_position_deformation : false, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.05_f32 } }, SkeletalBoneInfo { bone_name : "mHipLeft" + .to_owned(), has_position_deformation : false, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.1_f32 } }, SkeletalBoneInfo { bone_name : "mHipRight" + .to_owned(), has_position_deformation : false, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.1_f32 } }, SkeletalBoneInfo { bone_name : "mKneeLeft" + .to_owned(), has_position_deformation : false, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.1_f32 } }, SkeletalBoneInfo { bone_name : "mKneeRight" + .to_owned(), has_position_deformation : false, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.1_f32 } }, SkeletalBoneInfo { bone_name : + "mHindLimb1Left".to_owned(), has_position_deformation : + false, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, + z : 0.1_f32 } }, SkeletalBoneInfo { bone_name : + "mHindLimb1Right".to_owned(), has_position_deformation : + false, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, + z : 0.1_f32 } }, SkeletalBoneInfo { bone_name : + "mHindLimb2Left".to_owned(), has_position_deformation : + false, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, + z : 0.1_f32 } }, SkeletalBoneInfo { bone_name : + "mHindLimb2Right".to_owned(), has_position_deformation : + false, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, + z : 0.1_f32 } }, SkeletalBoneInfo { bone_name : "mWing1Left" + .to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : "mWing2Left" + .to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : - + 0.015_f32, y : 0.015_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : "mWing3Left" + .to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : - + 0.025_f32, y : 0.025_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : "mWing4Left" + .to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : - + 0.03_f32, y : 0.03_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mWing4FanLeft".to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : - + 0.03_f32, y : 0.03_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : "mWing1Right" + .to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : "mWing2Right" + .to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : - + 0.015_f32, y : - 0.015_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, + z : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mWing3Right".to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : - + 0.025_f32, y : - 0.025_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, + z : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mWing4Right".to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : - + 0.03_f32, y : - 0.03_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mWing4FanRight".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : - 0.03_f32, y : - 0.03_f32, z : 0.0_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mTail1".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : - 0.02_f32, y : 0.0_f32, z : 0.0_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mTail2".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : - 0.02_f32, y : 0.0_f32, z : 0.0_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mTail3".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : - 0.02_f32, y : 0.0_f32, z : 0.0_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mTail4".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : - 0.02_f32, y : 0.0_f32, z : 0.0_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mTail5".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : - 0.02_f32, y : 0.0_f32, z : 0.0_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mTail6".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : - 0.02_f32, y : 0.0_f32, z : 0.0_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } } + ], + ), + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 34, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "Body Thickness".to_owned(), + label_max: "Body Thick".to_owned(), + label_min: "Body Thin".to_owned(), + max_value: 1.5_f32, + min_value: -0.7_f32, + name: "Thickness".to_owned(), + param_id: 34, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mNeck".to_owned(), + has_position_deformation : false, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.1_f32, y : 0.1_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : "mCollarLeft" + .to_owned(), has_position_deformation : false, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.2_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : "mCollarRight" + .to_owned(), has_position_deformation : false, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.2_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mShoulderLeft".to_owned(), has_position_deformation : + false, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.1_f32, y : 0.0_f32, + z : 0.1_f32 } }, SkeletalBoneInfo { bone_name : + "mShoulderRight".to_owned(), has_position_deformation : + false, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.1_f32, y : 0.0_f32, + z : 0.1_f32 } }, SkeletalBoneInfo { bone_name : "mElbowLeft" + .to_owned(), has_position_deformation : false, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.1_f32, y : 0.0_f32, z + : 0.1_f32 } }, SkeletalBoneInfo { bone_name : "mElbowRight" + .to_owned(), has_position_deformation : false, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.1_f32, y : 0.0_f32, z + : 0.1_f32 } }, SkeletalBoneInfo { bone_name : "mChest" + .to_owned(), has_position_deformation : false, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.1_f32, y : 0.1_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : "mTorso" + .to_owned(), has_position_deformation : false, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.1_f32, y : 0.1_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : "mSpine3" + .to_owned(), has_position_deformation : false, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.1_f32, y : 0.1_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : "mSpine4" + .to_owned(), has_position_deformation : false, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.1_f32, y : 0.1_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : "mPelvis" + .to_owned(), has_position_deformation : false, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.1_f32, y : 0.1_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : "mSpine1" + .to_owned(), has_position_deformation : false, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.1_f32, y : 0.1_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : "mSpine2" + .to_owned(), has_position_deformation : false, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.1_f32, y : 0.1_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : "mHipLeft" + .to_owned(), has_position_deformation : false, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.13_f32, y : 0.13_f32, + z : 0.0_f32 } }, SkeletalBoneInfo { bone_name : "mHipRight" + .to_owned(), has_position_deformation : false, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.13_f32, y : 0.13_f32, + z : 0.0_f32 } }, SkeletalBoneInfo { bone_name : "mKneeLeft" + .to_owned(), has_position_deformation : false, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.12_f32, y : 0.12_f32, + z : 0.0_f32 } }, SkeletalBoneInfo { bone_name : "mKneeRight" + .to_owned(), has_position_deformation : false, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.12_f32, y : 0.12_f32, + z : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mHindLimbsRoot".to_owned(), has_position_deformation : + false, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.1_f32, y : 0.1_f32, + z : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mHindLimb1Left".to_owned(), has_position_deformation : + false, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.13_f32, y : + 0.13_f32, z : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mHindLimb1Right".to_owned(), has_position_deformation : + false, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.13_f32, y : + 0.13_f32, z : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mHindLimb2Left".to_owned(), has_position_deformation : + false, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.12_f32, y : + 0.12_f32, z : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mHindLimb2Right".to_owned(), has_position_deformation : + false, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.12_f32, y : + 0.12_f32, z : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mTail1".to_owned(), has_position_deformation : false, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.05_f32, y : 0.1_f32, z + : 0.1_f32 } }, SkeletalBoneInfo { bone_name : "mTail2" + .to_owned(), has_position_deformation : false, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.05_f32, y : 0.1_f32, z + : 0.1_f32 } }, SkeletalBoneInfo { bone_name : "mTail3" + .to_owned(), has_position_deformation : false, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.05_f32, y : 0.1_f32, z + : 0.1_f32 } }, SkeletalBoneInfo { bone_name : "mTail4" + .to_owned(), has_position_deformation : false, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.05_f32, y : 0.1_f32, z + : 0.1_f32 } }, SkeletalBoneInfo { bone_name : "mTail5" + .to_owned(), has_position_deformation : false, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.05_f32, y : 0.1_f32, z + : 0.1_f32 } }, SkeletalBoneInfo { bone_name : "mTail6" + .to_owned(), has_position_deformation : false, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.05_f32, y : 0.1_f32, z + : 0.1_f32 } }, SkeletalBoneInfo { bone_name : "mWing1Right" + .to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : - + 0.01_f32, y : - 0.01_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : "mWing1Left" + .to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : - + 0.01_f32, y : 0.01_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } } + ], + ), + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 35, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 20035 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 30035 } + ], + ), + drivers: Some(vec![20035, 30035]), + group: 0, + is_bump_attribute: false, + label: "Ear Size".to_owned(), + label_max: "Large".to_owned(), + label_min: "Small".to_owned(), + max_value: 2.0_f32, + min_value: -1.0_f32, + name: "Big_Ears".to_owned(), + param_id: 35, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 36, + VisualParam { + alpha_params: None, + color_params: None, + default_value: -0.5_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "Shoulders".to_owned(), + label_max: "Broad".to_owned(), + label_min: "Narrow".to_owned(), + max_value: 1.4_f32, + min_value: -1.8_f32, + name: "Shoulders".to_owned(), + param_id: 36, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mNeck".to_owned(), + has_position_deformation : false, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.01_f32, y : 0.03_f32, + z : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mCollarLeft".to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.02_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : "mCollarRight" + .to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : - 0.02_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : "mChest" + .to_owned(), has_position_deformation : false, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.02_f32, y : 0.08_f32, + z : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mWing1Right".to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : - 0.02_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : "mWing1Left" + .to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.02_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } } + ], + ), + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 37, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "Hip Width".to_owned(), + label_max: "Wide".to_owned(), + label_min: "Narrow".to_owned(), + max_value: 2.8_f32, + min_value: -3.2_f32, + name: "Hip Width".to_owned(), + param_id: 37, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mPelvis".to_owned(), + has_position_deformation : false, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.1_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : "mSpine1" + .to_owned(), has_position_deformation : false, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.1_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : "mSpine2" + .to_owned(), has_position_deformation : false, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.1_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : "mHipLeft" + .to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.004_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : "mHipRight" + .to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : - 0.004_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mHindLimbsRoot".to_owned(), has_position_deformation : + false, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.1_f32, + z : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mHindLimb1Left".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.004_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, + z : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mHindLimb1Right".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : - 0.004_f32, z : 0.0_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mTail1".to_owned(), has_position_deformation : + false, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.05_f32, + z : 0.0_f32 } }, SkeletalBoneInfo { bone_name : "mTail2" + .to_owned(), has_position_deformation : false, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.02_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : "mTail3" + .to_owned(), has_position_deformation : false, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.01_f32, z + : 0.0_f32 } } + ], + ), + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 38, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Long Torso".to_owned(), + label_min: "Short Torso".to_owned(), + max_value: 1.0_f32, + min_value: -1.0_f32, + name: "Torso Length".to_owned(), + param_id: 38, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mTorso".to_owned(), + has_position_deformation : false, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.3_f32 } }, SkeletalBoneInfo { bone_name : "mSpine3" + .to_owned(), has_position_deformation : false, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.3_f32 } }, SkeletalBoneInfo { bone_name : "mSpine4" + .to_owned(), has_position_deformation : false, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.3_f32 } }, SkeletalBoneInfo { bone_name : "mPelvis" + .to_owned(), has_position_deformation : false, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.1_f32 } }, SkeletalBoneInfo { bone_name : "mSpine1" + .to_owned(), has_position_deformation : false, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.1_f32 } }, SkeletalBoneInfo { bone_name : "mSpine2" + .to_owned(), has_position_deformation : false, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.1_f32 } }, SkeletalBoneInfo { bone_name : "mHipLeft" + .to_owned(), has_position_deformation : false, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : - 0.1_f32 } }, SkeletalBoneInfo { bone_name : "mHipRight" + .to_owned(), has_position_deformation : false, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : - 0.1_f32 } }, SkeletalBoneInfo { bone_name : "mKneeRight" + .to_owned(), has_position_deformation : false, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : - 0.05_f32 } }, SkeletalBoneInfo { bone_name : "mKneeLeft" + .to_owned(), has_position_deformation : false, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : - 0.05_f32 } }, SkeletalBoneInfo { bone_name : + "mHindLimbsRoot".to_owned(), has_position_deformation : + false, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, + z : 0.1_f32 } }, SkeletalBoneInfo { bone_name : + "mHindLimb1Left".to_owned(), has_position_deformation : + false, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, + z : - 0.1_f32 } }, SkeletalBoneInfo { bone_name : + "mHindLimb1Right".to_owned(), has_position_deformation : + false, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, + z : - 0.1_f32 } }, SkeletalBoneInfo { bone_name : + "mHindLimb2Right".to_owned(), has_position_deformation : + false, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, + z : - 0.05_f32 } }, SkeletalBoneInfo { bone_name : + "mHindLimb2Left".to_owned(), has_position_deformation : + false, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, + z : - 0.05_f32 } } + ], + ), + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 40, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Male_Head".to_owned(), + param_id: 40, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 41, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Old".to_owned(), + param_id: 41, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 51, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Furrowed_Eyebrows".to_owned(), + param_id: 51, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 53, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Surprised_Eyebrows".to_owned(), + param_id: 53, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 54, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Worried_Eyebrows".to_owned(), + param_id: 54, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 55, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Frown_Mouth".to_owned(), + param_id: 55, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 57, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Smile_Mouth".to_owned(), + param_id: 57, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 58, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Blink_Left".to_owned(), + param_id: 58, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 59, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Blink_Right".to_owned(), + param_id: 59, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 70, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Lipsync_Aah".to_owned(), + param_id: 70, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 71, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Lipsync_Ooh".to_owned(), + param_id: 71, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 80, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 32 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 153 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 40 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 100 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 857 } + ], + ), + drivers: Some(vec![32, 153, 40, 100, 857]), + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "male".to_owned(), + param_id: 80, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 93, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.8_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 1058 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 1059 } + ], + ), + drivers: Some(vec![1058, 1059]), + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Long".to_owned(), + label_min: "Short".to_owned(), + max_value: 1.0_f32, + min_value: 0.01_f32, + name: "Glove Length".to_owned(), + param_id: 93, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("gloves".to_owned()), + }, + ); + params + .insert( + 98, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(0_u8) / 255.0 }, libremetaverse_types::Color4 { + r : f32::from(255_u8) / 255.0, g : f32::from(255_u8) / + 255.0, b : f32::from(255_u8) / 255.0, a : f32::from(255_u8) + / 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Lighter".to_owned(), + label_min: "Darker".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Eye Lightness".to_owned(), + param_id: 98, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("eyes".to_owned()), + }, + ); + params + .insert( + 99, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(50_u8) / 255.0, + g : f32::from(25_u8) / 255.0, b : f32::from(5_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(109_u8) / 255.0, g : f32::from(55_u8) / + 255.0, b : f32::from(15_u8) / 255.0, a : f32::from(255_u8) / + 255.0 }, libremetaverse_types::Color4 { r : + f32::from(150_u8) / 255.0, g : f32::from(93_u8) / 255.0, b : + f32::from(49_u8) / 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(152_u8) / + 255.0, g : f32::from(118_u8) / 255.0, b : f32::from(25_u8) / + 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(95_u8) / 255.0, + g : f32::from(179_u8) / 255.0, b : f32::from(107_u8) / + 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(87_u8) / 255.0, + g : f32::from(192_u8) / 255.0, b : f32::from(191_u8) / + 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(95_u8) / 255.0, + g : f32::from(172_u8) / 255.0, b : f32::from(179_u8) / + 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(128_u8) / + 255.0, g : f32::from(128_u8) / 255.0, b : f32::from(128_u8) + / 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(255_u8) / 255.0, g : f32::from(255_u8) / + 255.0, b : f32::from(0_u8) / 255.0, a : f32::from(255_u8) / + 255.0 }, libremetaverse_types::Color4 { r : f32::from(0_u8) + / 255.0, g : f32::from(255_u8) / 255.0, b : f32::from(0_u8) + / 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(255_u8) / 255.0, b : f32::from(255_u8) / + 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(255_u8) / 255.0, + a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(255_u8) / + 255.0, g : f32::from(0_u8) / 255.0, b : f32::from(255_u8) / + 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(255_u8) / + 255.0, g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / + 255.0, a : f32::from(255_u8) / 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Unnatural".to_owned(), + label_min: "Natural".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Eye Color".to_owned(), + param_id: 99, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("eyes".to_owned()), + }, + ); + params + .insert( + 100, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "Male_Torso".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Male_Torso".to_owned(), + param_id: 100, + skeletal_distortions: None, + volume_morphs: Some( + vec![ + VolumeMorphInfo { bone_name : "CHEST".to_owned(), + has_position : true, has_scale : true, position_delta : + libremetaverse_types::Vector3 { x : - 0.03_f32, y : 0.0_f32, + z : - 0.01_f32 }, scale_delta : + libremetaverse_types::Vector3 { x : 0.03_f32, y : 0.04_f32, + z : 0.02_f32 } }, VolumeMorphInfo { bone_name : "BELLY" + .to_owned(), has_position : true, has_scale : true, + position_delta : libremetaverse_types::Vector3 { x : - + 0.03_f32, y : 0.0_f32, z : 0.02_f32 }, scale_delta : + libremetaverse_types::Vector3 { x : 0.03_f32, y : 0.03_f32, + z : 0.0_f32 } }, VolumeMorphInfo { bone_name : "LEFT_PEC" + .to_owned(), has_position : true, has_scale : true, + position_delta : libremetaverse_types::Vector3 { x : + 0.008_f32, y : - 0.03_f32, z : 0.01_f32 }, scale_delta : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, VolumeMorphInfo { bone_name : "RIGHT_PEC" + .to_owned(), has_position : true, has_scale : true, + position_delta : libremetaverse_types::Vector3 { x : + 0.008_f32, y : 0.03_f32, z : 0.01_f32 }, scale_delta : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, VolumeMorphInfo { bone_name : "L_CLAVICLE" + .to_owned(), has_position : true, has_scale : true, + position_delta : libremetaverse_types::Vector3 { x : - + 0.02_f32, y : 0.0_f32, z : 0.0_f32 }, scale_delta : + libremetaverse_types::Vector3 { x : 0.02_f32, y : 0.0_f32, z + : 0.01_f32 } }, VolumeMorphInfo { bone_name : "L_UPPER_ARM" + .to_owned(), has_position : true, has_scale : true, + position_delta : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : - 0.01_f32 }, scale_delta : + libremetaverse_types::Vector3 { x : 0.01_f32, y : 0.0_f32, z + : 0.01_f32 } }, VolumeMorphInfo { bone_name : "L_LOWER_ARM" + .to_owned(), has_position : true, has_scale : true, + position_delta : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : - 0.005_f32 }, scale_delta : + libremetaverse_types::Vector3 { x : 0.005_f32, y : 0.0_f32, + z : 0.005_f32 } }, VolumeMorphInfo { bone_name : + "R_CLAVICLE".to_owned(), has_position : true, has_scale : + true, position_delta : libremetaverse_types::Vector3 { x : - + 0.02_f32, y : 0.0_f32, z : 0.0_f32 }, scale_delta : + libremetaverse_types::Vector3 { x : 0.02_f32, y : 0.0_f32, z + : 0.01_f32 } }, VolumeMorphInfo { bone_name : "R_UPPER_ARM" + .to_owned(), has_position : true, has_scale : true, + position_delta : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : - 0.01_f32 }, scale_delta : + libremetaverse_types::Vector3 { x : 0.01_f32, y : 0.0_f32, z + : 0.01_f32 } }, VolumeMorphInfo { bone_name : "R_LOWER_ARM" + .to_owned(), has_position : true, has_scale : true, + position_delta : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : - 0.005_f32 }, scale_delta : + libremetaverse_types::Vector3 { x : 0.005_f32, y : 0.0_f32, + z : 0.005_f32 } }, VolumeMorphInfo { bone_name : "NECK" + .to_owned(), has_position : false, has_scale : true, + position_delta : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_delta : + libremetaverse_types::Vector3 { x : 0.015_f32, y : 0.01_f32, + z : 0.0_f32 } }, VolumeMorphInfo { bone_name : "HEAD" + .to_owned(), has_position : true, has_scale : true, + position_delta : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : - 0.01_f32 }, scale_delta : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.01_f32 } } + ], + ), + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 101, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Hands_Relaxed".to_owned(), + param_id: 101, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 102, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Hands_Point".to_owned(), + param_id: 102, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 103, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Hands_Fist".to_owned(), + param_id: 103, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 104, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Big_Belly_Torso".to_owned(), + param_id: 104, + skeletal_distortions: None, + volume_morphs: Some( + vec![ + VolumeMorphInfo { bone_name : "BELLY".to_owned(), + has_position : true, has_scale : true, position_delta : + libremetaverse_types::Vector3 { x : 0.07_f32, y : 0.0_f32, z + : - 0.07_f32 }, scale_delta : libremetaverse_types::Vector3 + { x : 0.075_f32, y : 0.04_f32, z : 0.03_f32 } }, + VolumeMorphInfo { bone_name : "PELVIS".to_owned(), + has_position : true, has_scale : true, position_delta : + libremetaverse_types::Vector3 { x : 0.07_f32, y : 0.0_f32, z + : - 0.02_f32 }, scale_delta : libremetaverse_types::Vector3 + { x : 0.075_f32, y : 0.04_f32, z : 0.03_f32 } } + ], + ), + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 105, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.5_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : true, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.01_f32, param_id : 843 }, + DrivenParamInfo { has_range : true, max1 : 0.01_f32, max2 : + 0.01_f32, min1 : 0.0_f32, min2 : 0.5_f32, param_id : 627 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.5_f32, min2 : 1.0_f32, param_id : 626 } + ], + ), + drivers: Some(vec![843, 627, 626]), + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Large".to_owned(), + label_min: "Small".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Breast Size".to_owned(), + param_id: 105, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 106, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "Torso Muscles".to_owned(), + label_max: "Muscular".to_owned(), + label_min: "Regular".to_owned(), + max_value: 1.4_f32, + min_value: 0.0_f32, + name: "Muscular_Torso".to_owned(), + param_id: 106, + skeletal_distortions: None, + volume_morphs: Some( + vec![ + VolumeMorphInfo { bone_name : "L_CLAVICLE".to_owned(), + has_position : true, has_scale : true, position_delta : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.005_f32 }, scale_delta : libremetaverse_types::Vector3 { + x : 0.02_f32, y : 0.0_f32, z : 0.005_f32 } }, + VolumeMorphInfo { bone_name : "L_UPPER_ARM".to_owned(), + has_position : true, has_scale : true, position_delta : + libremetaverse_types::Vector3 { x : 0.015_f32, y : 0.0_f32, + z : 0.0_f32 }, scale_delta : libremetaverse_types::Vector3 { + x : 0.015_f32, y : 0.0_f32, z : 0.005_f32 } }, + VolumeMorphInfo { bone_name : "L_LOWER_ARM".to_owned(), + has_position : true, has_scale : true, position_delta : + libremetaverse_types::Vector3 { x : 0.005_f32, y : 0.0_f32, + z : 0.0_f32 }, scale_delta : libremetaverse_types::Vector3 { + x : 0.005_f32, y : 0.0_f32, z : 0.005_f32 } }, + VolumeMorphInfo { bone_name : "R_CLAVICLE".to_owned(), + has_position : true, has_scale : true, position_delta : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.005_f32 }, scale_delta : libremetaverse_types::Vector3 { + x : 0.02_f32, y : 0.0_f32, z : 0.005_f32 } }, + VolumeMorphInfo { bone_name : "R_UPPER_ARM".to_owned(), + has_position : true, has_scale : true, position_delta : + libremetaverse_types::Vector3 { x : 0.015_f32, y : 0.0_f32, + z : 0.0_f32 }, scale_delta : libremetaverse_types::Vector3 { + x : 0.015_f32, y : 0.0_f32, z : 0.005_f32 } }, + VolumeMorphInfo { bone_name : "R_LOWER_ARM".to_owned(), + has_position : true, has_scale : true, position_delta : + libremetaverse_types::Vector3 { x : 0.005_f32, y : 0.0_f32, + z : 0.0_f32 }, scale_delta : libremetaverse_types::Vector3 { + x : 0.005_f32, y : 0.0_f32, z : 0.005_f32 } } + ], + ), + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 107, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "Torso Muscles".to_owned(), + label_max: "Muscular".to_owned(), + label_min: "Regular".to_owned(), + max_value: 1.4_f32, + min_value: 0.0_f32, + name: "Muscular_Torso".to_owned(), + param_id: 107, + skeletal_distortions: None, + volume_morphs: Some( + vec![ + VolumeMorphInfo { bone_name : "L_CLAVICLE".to_owned(), + has_position : true, has_scale : true, position_delta : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.005_f32 }, scale_delta : libremetaverse_types::Vector3 { + x : 0.02_f32, y : 0.0_f32, z : 0.005_f32 } }, + VolumeMorphInfo { bone_name : "L_UPPER_ARM".to_owned(), + has_position : true, has_scale : true, position_delta : + libremetaverse_types::Vector3 { x : 0.015_f32, y : 0.0_f32, + z : 0.0_f32 }, scale_delta : libremetaverse_types::Vector3 { + x : 0.015_f32, y : 0.0_f32, z : 0.005_f32 } }, + VolumeMorphInfo { bone_name : "L_LOWER_ARM".to_owned(), + has_position : true, has_scale : true, position_delta : + libremetaverse_types::Vector3 { x : 0.005_f32, y : 0.0_f32, + z : 0.0_f32 }, scale_delta : libremetaverse_types::Vector3 { + x : 0.005_f32, y : 0.0_f32, z : 0.005_f32 } }, + VolumeMorphInfo { bone_name : "R_CLAVICLE".to_owned(), + has_position : true, has_scale : true, position_delta : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.005_f32 }, scale_delta : libremetaverse_types::Vector3 { + x : 0.02_f32, y : 0.0_f32, z : 0.005_f32 } }, + VolumeMorphInfo { bone_name : "R_UPPER_ARM".to_owned(), + has_position : true, has_scale : true, position_delta : + libremetaverse_types::Vector3 { x : 0.015_f32, y : 0.0_f32, + z : 0.0_f32 }, scale_delta : libremetaverse_types::Vector3 { + x : 0.015_f32, y : 0.0_f32, z : 0.005_f32 } }, + VolumeMorphInfo { bone_name : "R_LOWER_ARM".to_owned(), + has_position : true, has_scale : true, position_delta : + libremetaverse_types::Vector3 { x : 0.005_f32, y : 0.0_f32, + z : 0.0_f32 }, scale_delta : libremetaverse_types::Vector3 { + x : 0.005_f32, y : 0.0_f32, z : 0.005_f32 } } + ], + ), + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 108, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(255_u8) / 255.0, g : f32::from(0_u8) / + 255.0, b : f32::from(255_u8) / 255.0, a : f32::from(255_u8) + / 255.0 }, libremetaverse_types::Color4 { r : + f32::from(255_u8) / 255.0, g : f32::from(0_u8) / 255.0, b : + f32::from(0_u8) / 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(255_u8) / + 255.0, g : f32::from(255_u8) / 255.0, b : f32::from(0_u8) / + 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(255_u8) / 255.0, b : f32::from(0_u8) / 255.0, + a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(255_u8) / 255.0, b : f32::from(255_u8) / + 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(255_u8) / 255.0, + a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(255_u8) / + 255.0, g : f32::from(0_u8) / 255.0, b : f32::from(255_u8) / + 255.0, a : f32::from(255_u8) / 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Wild".to_owned(), + label_min: "None".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Rainbow Color".to_owned(), + param_id: 108, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("skin".to_owned()), + }, + ); + params + .insert( + 110, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(218_u8) / + 255.0, g : f32::from(41_u8) / 255.0, b : f32::from(37_u8) / + 255.0, a : f32::from(255_u8) / 255.0 } + ], + operation: crate::VisualColorOperation::Blend, + }), + ), + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "Ruddiness".to_owned(), + label_max: "Ruddy".to_owned(), + label_min: "Pale".to_owned(), + max_value: 0.1_f32, + min_value: 0.0_f32, + name: "Red Skin".to_owned(), + param_id: 110, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("skin".to_owned()), + }, + ); + params + .insert( + 111, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(252_u8) / + 255.0, g : f32::from(215_u8) / 255.0, b : f32::from(200_u8) + / 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(240_u8) / + 255.0, g : f32::from(177_u8) / 255.0, b : f32::from(112_u8) + / 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(90_u8) / 255.0, + g : f32::from(40_u8) / 255.0, b : f32::from(16_u8) / 255.0, + a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(29_u8) / 255.0, + g : f32::from(9_u8) / 255.0, b : f32::from(6_u8) / 255.0, a + : f32::from(255_u8) / 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 0.5_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Dark".to_owned(), + label_min: "Light".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Pigment".to_owned(), + param_id: 111, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("skin".to_owned()), + }, + ); + params + .insert( + 112, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(255_u8) / 255.0, g : f32::from(0_u8) / + 255.0, b : f32::from(255_u8) / 255.0, a : f32::from(255_u8) + / 255.0 }, libremetaverse_types::Color4 { r : + f32::from(255_u8) / 255.0, g : f32::from(0_u8) / 255.0, b : + f32::from(0_u8) / 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(255_u8) / + 255.0, g : f32::from(255_u8) / 255.0, b : f32::from(0_u8) / + 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(255_u8) / 255.0, b : f32::from(0_u8) / 255.0, + a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(255_u8) / 255.0, b : f32::from(255_u8) / + 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(255_u8) / 255.0, + a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(255_u8) / + 255.0, g : f32::from(0_u8) / 255.0, b : f32::from(255_u8) / + 255.0, a : f32::from(255_u8) / 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Wild".to_owned(), + label_min: "None".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Rainbow Color".to_owned(), + param_id: 112, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 113, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(118_u8) / 255.0, g : f32::from(47_u8) / + 255.0, b : f32::from(19_u8) / 255.0, a : f32::from(255_u8) / + 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Very Red".to_owned(), + label_min: "No Red".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Red Hair".to_owned(), + param_id: 113, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 114, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(22_u8) / 255.0, g : f32::from(6_u8) / 255.0, + b : f32::from(6_u8) / 255.0, a : f32::from(255_u8) / 255.0 + }, libremetaverse_types::Color4 { r : f32::from(29_u8) / + 255.0, g : f32::from(9_u8) / 255.0, b : f32::from(6_u8) / + 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(45_u8) / 255.0, + g : f32::from(21_u8) / 255.0, b : f32::from(11_u8) / 255.0, + a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(78_u8) / 255.0, + g : f32::from(39_u8) / 255.0, b : f32::from(11_u8) / 255.0, + a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(90_u8) / 255.0, + g : f32::from(53_u8) / 255.0, b : f32::from(16_u8) / 255.0, + a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(136_u8) / + 255.0, g : f32::from(92_u8) / 255.0, b : f32::from(21_u8) / + 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(150_u8) / + 255.0, g : f32::from(106_u8) / 255.0, b : f32::from(33_u8) / + 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(198_u8) / + 255.0, g : f32::from(156_u8) / 255.0, b : f32::from(74_u8) / + 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(233_u8) / + 255.0, g : f32::from(192_u8) / 255.0, b : f32::from(103_u8) + / 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(238_u8) / + 255.0, g : f32::from(205_u8) / 255.0, b : f32::from(136_u8) + / 255.0, a : f32::from(255_u8) / 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 0.5_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Blonde".to_owned(), + label_min: "Black".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Blonde Hair".to_owned(), + param_id: 114, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 115, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(255_u8) / 255.0, g : f32::from(255_u8) / + 255.0, b : f32::from(255_u8) / 255.0, a : f32::from(255_u8) + / 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "All White".to_owned(), + label_min: "No White".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "White Hair".to_owned(), + param_id: 115, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 116, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(198_u8) / + 255.0, g : f32::from(71_u8) / 255.0, b : f32::from(71_u8) / + 255.0, a : f32::from(0_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(198_u8) / + 255.0, g : f32::from(71_u8) / 255.0, b : f32::from(71_u8) / + 255.0, a : f32::from(255_u8) / 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "More Rosy".to_owned(), + label_min: "Less Rosy".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Rosy Complexion".to_owned(), + param_id: 116, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("skin".to_owned()), + }, + ); + params + .insert( + 117, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(220_u8) / + 255.0, g : f32::from(115_u8) / 255.0, b : f32::from(115_u8) + / 255.0, a : f32::from(0_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(220_u8) / + 255.0, g : f32::from(115_u8) / 255.0, b : f32::from(115_u8) + / 255.0, a : f32::from(128_u8) / 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Pinker".to_owned(), + label_min: "Darker".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Lip Pinkness".to_owned(), + param_id: 117, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("skin".to_owned()), + }, + ); + params + .insert( + 118, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.3_f32, + multiply_blend: false, + skip_if_zero: true, + tga_file: "bump_face_wrinkles.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: true, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Wrinkles".to_owned(), + param_id: 118, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("skin".to_owned()), + }, + ); + params + .insert( + 119, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.5_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 1000 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 1001 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 30119 } + ], + ), + drivers: Some(vec![1000, 1001, 30119]), + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Bushy Eyebrows".to_owned(), + label_min: "Thin Eyebrows".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Eyebrow Size".to_owned(), + param_id: 119, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 125, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(0_u8) / 255.0 }, libremetaverse_types::Color4 { + r : f32::from(0_u8) / 255.0, g : f32::from(0_u8) / 255.0, b + : f32::from(0_u8) / 255.0, a : f32::from(128_u8) / 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Shading".to_owned(), + param_id: 125, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("skin".to_owned()), + }, + ); + params + .insert( + 126, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(255_u8) / + 255.0, g : f32::from(255_u8) / 255.0, b : f32::from(255_u8) + / 255.0, a : f32::from(0_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(255_u8) / + 255.0, g : f32::from(255_u8) / 255.0, b : f32::from(255_u8) + / 255.0, a : f32::from(64_u8) / 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Shading".to_owned(), + param_id: 126, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("skin".to_owned()), + }, + ); + params + .insert( + 130, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.45_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : true, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.5_f32, param_id : 144 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.5_f32, min2 : 1.0_f32, param_id : 145 } + ], + ), + drivers: Some(vec![144, 145]), + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Long".to_owned(), + label_min: "Short".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Front Fringe".to_owned(), + param_id: 130, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 131, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.5_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : true, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.5_f32, param_id : 146 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.5_f32, min2 : 1.0_f32, param_id : 147 } + ], + ), + drivers: Some(vec![146, 147]), + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Long".to_owned(), + label_min: "Short".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Side Fringe".to_owned(), + param_id: 131, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 132, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.39_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : true, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.5_f32, param_id : 148 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.5_f32, min2 : 1.0_f32, param_id : 149 } + ], + ), + drivers: Some(vec![148, 149]), + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Long".to_owned(), + label_min: "Short".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Back Fringe".to_owned(), + param_id: 132, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 133, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.25_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : true, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.5_f32, param_id : 172 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.5_f32, min2 : 1.0_f32, param_id : 171 } + ], + ), + drivers: Some(vec![172, 171]), + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Long".to_owned(), + label_min: "Short".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Hair Front".to_owned(), + param_id: 133, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 134, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.5_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : true, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.5_f32, param_id : 174 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.5_f32, min2 : 1.0_f32, param_id : 173 } + ], + ), + drivers: Some(vec![174, 173]), + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Long".to_owned(), + label_min: "Short".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Hair Sides".to_owned(), + param_id: 134, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 135, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.55_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : true, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.5_f32, param_id : 176 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.5_f32, min2 : 1.0_f32, param_id : 175 } + ], + ), + drivers: Some(vec![176, 175]), + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Long".to_owned(), + label_min: "Short".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Hair Back".to_owned(), + param_id: 135, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 136, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.5_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : true, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.5_f32, param_id : 179 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.5_f32, min2 : 1.0_f32, param_id : 178 } + ], + ), + drivers: Some(vec![179, 178]), + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Sweep Back".to_owned(), + label_min: "Sweep Forward".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Hair Sweep".to_owned(), + param_id: 136, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 137, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.5_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : true, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.5_f32, param_id : 190 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.5_f32, min2 : 1.0_f32, param_id : 191 } + ], + ), + drivers: Some(vec![190, 191]), + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Right".to_owned(), + label_min: "Left".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Hair Tilt".to_owned(), + param_id: 137, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 140, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "Middle Part".to_owned(), + label_max: "Part".to_owned(), + label_min: "No Part".to_owned(), + max_value: 2.0_f32, + min_value: 0.0_f32, + name: "Hair_Part_Middle".to_owned(), + param_id: 140, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 141, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "Right Part".to_owned(), + label_max: "Part".to_owned(), + label_min: "No Part".to_owned(), + max_value: 2.0_f32, + min_value: 0.0_f32, + name: "Hair_Part_Right".to_owned(), + param_id: 141, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 142, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "Left Part".to_owned(), + label_max: "Part".to_owned(), + label_min: "No Part".to_owned(), + max_value: 2.0_f32, + min_value: 0.0_f32, + name: "Hair_Part_Left".to_owned(), + param_id: 142, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 143, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.125_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "Full Hair Sides".to_owned(), + label_max: "Full Sides".to_owned(), + label_min: "Mowhawk".to_owned(), + max_value: 1.5_f32, + min_value: -4.0_f32, + name: "Hair_Sides_Full".to_owned(), + param_id: 143, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 144, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "Front Bangs Up".to_owned(), + label_max: "Bangs Up".to_owned(), + label_min: "Bangs".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Bangs_Front_Up".to_owned(), + param_id: 144, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 145, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "Front Bangs Down".to_owned(), + label_max: "Bangs Down".to_owned(), + label_min: "Bangs".to_owned(), + max_value: 5.0_f32, + min_value: 0.0_f32, + name: "Bangs_Front_Down".to_owned(), + param_id: 145, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 146, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "Side Bangs Up".to_owned(), + label_max: "Side Bangs Up".to_owned(), + label_min: "Side Bangs".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Bangs_Sides_Up".to_owned(), + param_id: 146, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 147, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "Side Bangs Down".to_owned(), + label_max: "Side Bangs Down".to_owned(), + label_min: "Side Bangs".to_owned(), + max_value: 2.0_f32, + min_value: 0.0_f32, + name: "Bangs_Sides_Down".to_owned(), + param_id: 147, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 148, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "Back Bangs Up".to_owned(), + label_max: "Back Bangs Up".to_owned(), + label_min: "Back Bangs".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Bangs_Back_Up".to_owned(), + param_id: 148, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 149, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "Back Bangs Down".to_owned(), + label_max: "Back Bangs Down".to_owned(), + label_min: "Back Bangs".to_owned(), + max_value: 2.0_f32, + min_value: 0.0_f32, + name: "Bangs_Back_Down".to_owned(), + param_id: 149, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 150, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 125 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 126 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 160 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 161 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 874 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 878 } + ], + ), + drivers: Some(vec![125, 126, 160, 161, 874, 878]), + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "More".to_owned(), + label_min: "Less".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Body Definition".to_owned(), + param_id: 150, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("skin".to_owned()), + }, + ); + params + .insert( + 151, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "Butt Size".to_owned(), + label_max: "Large".to_owned(), + label_min: "Regular".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Big_Butt_Legs".to_owned(), + param_id: 151, + skeletal_distortions: None, + volume_morphs: Some( + vec![ + VolumeMorphInfo { bone_name : "PELVIS".to_owned(), + has_position : true, has_scale : true, position_delta : + libremetaverse_types::Vector3 { x : - 0.03_f32, y : 0.0_f32, + z : - 0.025_f32 }, scale_delta : + libremetaverse_types::Vector3 { x : 0.03_f32, y : 0.0_f32, z + : 0.02_f32 } } + ], + ), + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 152, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "Leg Muscles".to_owned(), + label_max: "More Muscles".to_owned(), + label_min: "Regular Muscles".to_owned(), + max_value: 1.5_f32, + min_value: 0.0_f32, + name: "Muscular_Legs".to_owned(), + param_id: 152, + skeletal_distortions: None, + volume_morphs: Some( + vec![ + VolumeMorphInfo { bone_name : "L_UPPER_LEG".to_owned(), + has_position : true, has_scale : true, position_delta : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 }, scale_delta : libremetaverse_types::Vector3 { x + : 0.015_f32, y : 0.015_f32, z : 0.0_f32 } }, VolumeMorphInfo + { bone_name : "L_LOWER_LEG".to_owned(), has_position : true, + has_scale : true, position_delta : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 }, scale_delta : libremetaverse_types::Vector3 { x + : 0.01_f32, y : 0.01_f32, z : 0.0_f32 } }, VolumeMorphInfo { + bone_name : "R_UPPER_LEG".to_owned(), has_position : true, + has_scale : true, position_delta : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 }, scale_delta : libremetaverse_types::Vector3 { x + : 0.015_f32, y : 0.015_f32, z : 0.0_f32 } }, VolumeMorphInfo + { bone_name : "R_LOWER_LEG".to_owned(), has_position : true, + has_scale : true, position_delta : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 }, scale_delta : libremetaverse_types::Vector3 { x + : 0.01_f32, y : 0.01_f32, z : 0.0_f32 } } + ], + ), + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 153, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Male_Legs".to_owned(), + param_id: 153, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 155, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 29 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 30 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 30155 } + ], + ), + drivers: Some(vec![29, 30, 30155]), + group: 0, + is_bump_attribute: false, + label: "Lip Width".to_owned(), + label_max: "Wide Lips".to_owned(), + label_min: "Narrow Lips".to_owned(), + max_value: 1.3_f32, + min_value: -0.9_f32, + name: "Lip Width".to_owned(), + param_id: 155, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 156, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Big_Belly_Legs".to_owned(), + param_id: 156, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 157, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 104 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 156 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 849 } + ], + ), + drivers: Some(vec![104, 156, 849]), + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Big".to_owned(), + label_min: "Small".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Belly Size".to_owned(), + param_id: 157, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 158, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(0_u8) / 255.0 }, libremetaverse_types::Color4 { + r : f32::from(0_u8) / 255.0, g : f32::from(0_u8) / 255.0, b + : f32::from(0_u8) / 255.0, a : f32::from(128_u8) / 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Shading".to_owned(), + param_id: 158, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("skin".to_owned()), + }, + ); + params + .insert( + 159, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(255_u8) / + 255.0, g : f32::from(255_u8) / 255.0, b : f32::from(255_u8) + / 255.0, a : f32::from(0_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(255_u8) / + 255.0, g : f32::from(255_u8) / 255.0, b : f32::from(255_u8) + / 255.0, a : f32::from(64_u8) / 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Shading".to_owned(), + param_id: 159, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("skin".to_owned()), + }, + ); + params + .insert( + 160, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(0_u8) / 255.0 }, libremetaverse_types::Color4 { + r : f32::from(0_u8) / 255.0, g : f32::from(0_u8) / 255.0, b + : f32::from(0_u8) / 255.0, a : f32::from(128_u8) / 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Shading".to_owned(), + param_id: 160, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("pants".to_owned()), + }, + ); + params + .insert( + 161, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(255_u8) / + 255.0, g : f32::from(255_u8) / 255.0, b : f32::from(255_u8) + / 255.0, a : f32::from(0_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(255_u8) / + 255.0, g : f32::from(255_u8) / 255.0, b : f32::from(255_u8) + / 255.0, a : f32::from(64_u8) / 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Shading".to_owned(), + param_id: 161, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("skin".to_owned()), + }, + ); + params + .insert( + 162, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 158 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 159 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 873 } + ], + ), + drivers: Some(vec![158, 159, 873]), + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "More".to_owned(), + label_min: "Less".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Facial Definition".to_owned(), + param_id: 162, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("skin".to_owned()), + }, + ); + params + .insert( + 163, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 118 } + ], + ), + drivers: Some(vec![118]), + group: 3, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "More".to_owned(), + label_min: "Less".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Wrinkles".to_owned(), + param_id: 163, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("skin".to_owned()), + }, + ); + params + .insert( + 165, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.5_f32, + multiply_blend: false, + skip_if_zero: true, + tga_file: "freckles_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "More".to_owned(), + label_min: "Less".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Freckles".to_owned(), + param_id: 165, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("skin".to_owned()), + }, + ); + params + .insert( + 166, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 1004 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 1005 } + ], + ), + drivers: Some(vec![1004, 1005]), + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Mutton Chops".to_owned(), + label_min: "Short Sideburns".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Sideburns".to_owned(), + param_id: 166, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 167, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 1006 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 1007 } + ], + ), + drivers: Some(vec![1006, 1007]), + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Handlebars".to_owned(), + label_min: "Chaplin".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Moustache".to_owned(), + param_id: 167, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 168, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 1008 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 1009 } + ], + ), + drivers: Some(vec![1008, 1009]), + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "More soul".to_owned(), + label_min: "Less soul".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Soulpatch".to_owned(), + param_id: 168, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 169, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 1010 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 1011 } + ], + ), + drivers: Some(vec![1010, 1011]), + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "More Curtains".to_owned(), + label_min: "Less Curtains".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Chin Curtains".to_owned(), + param_id: 169, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 171, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "Front Hair Down".to_owned(), + label_max: "Front Hair Down".to_owned(), + label_min: "Front Hair".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Hair_Front_Down".to_owned(), + param_id: 171, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 172, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "Front Hair Up".to_owned(), + label_max: "Front Hair Up".to_owned(), + label_min: "Front Hair".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Hair_Front_Up".to_owned(), + param_id: 172, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 173, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "Sides Hair Down".to_owned(), + label_max: "Sides Hair Down".to_owned(), + label_min: "Sides Hair".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Hair_Sides_Down".to_owned(), + param_id: 173, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 174, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "Sides Hair Up".to_owned(), + label_max: "Sides Hair Up".to_owned(), + label_min: "Sides Hair".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Hair_Sides_Up".to_owned(), + param_id: 174, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 175, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "Back Hair Down".to_owned(), + label_max: "Back Hair Down".to_owned(), + label_min: "Back Hair".to_owned(), + max_value: 3.0_f32, + min_value: 0.0_f32, + name: "Hair_Back_Down".to_owned(), + param_id: 175, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 176, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "Back Hair Up".to_owned(), + label_max: "Back Hair Up".to_owned(), + label_min: "Back Hair".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Hair_Back_Up".to_owned(), + param_id: 176, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 177, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "Rumpled Hair".to_owned(), + label_max: "Rumpled Hair".to_owned(), + label_min: "Smooth Hair".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Hair_Rumpled".to_owned(), + param_id: 177, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 178, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "Swept Back Hair".to_owned(), + label_max: "Swept Back".to_owned(), + label_min: "NotHair".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Hair_Swept_Back".to_owned(), + param_id: 178, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 179, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "Swept Forward Hair".to_owned(), + label_max: "Swept Forward".to_owned(), + label_min: "Hair".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Hair_Swept_Forward".to_owned(), + param_id: 179, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 180, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "Hair Volume".to_owned(), + label_max: "More".to_owned(), + label_min: "Less".to_owned(), + max_value: 1.3_f32, + min_value: 0.0_f32, + name: "Hair_Volume".to_owned(), + param_id: 180, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 181, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.14_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "Big Hair Front".to_owned(), + label_max: "More".to_owned(), + label_min: "Less".to_owned(), + max_value: 1.0_f32, + min_value: -1.0_f32, + name: "Hair_Big_Front".to_owned(), + param_id: 181, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 182, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.7_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "Big Hair Top".to_owned(), + label_max: "More".to_owned(), + label_min: "Less".to_owned(), + max_value: 1.0_f32, + min_value: -1.0_f32, + name: "Hair_Big_Top".to_owned(), + param_id: 182, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 183, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.05_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "Big Hair Back".to_owned(), + label_max: "More".to_owned(), + label_min: "Less".to_owned(), + max_value: 1.0_f32, + min_value: -1.0_f32, + name: "Hair_Big_Back".to_owned(), + param_id: 183, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 184, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "Spiked Hair".to_owned(), + label_max: "Big Spikes".to_owned(), + label_min: "No Spikes".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Hair_Spiked".to_owned(), + param_id: 184, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 185, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 20185 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 30185 } + ], + ), + drivers: Some(vec![20185, 30185]), + group: 0, + is_bump_attribute: false, + label: "Chin Depth".to_owned(), + label_max: "Deep".to_owned(), + label_min: "Shallow".to_owned(), + max_value: 1.0_f32, + min_value: -1.0_f32, + name: "Deep_Chin".to_owned(), + param_id: 185, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 186, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "Egg Head".to_owned(), + label_max: "Forehead Heavy".to_owned(), + label_min: "Chin Heavy".to_owned(), + max_value: 1.0_f32, + min_value: -1.3_f32, + name: "Egg_Head".to_owned(), + param_id: 186, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 187, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "Squash/Stretch Head".to_owned(), + label_max: "Stretch Head".to_owned(), + label_min: "Squash Head".to_owned(), + max_value: 1.0_f32, + min_value: -0.5_f32, + name: "Squash_Stretch_Head".to_owned(), + param_id: 187, + skeletal_distortions: None, + volume_morphs: Some( + vec![ + VolumeMorphInfo { bone_name : "HEAD".to_owned(), + has_position : false, has_scale : true, position_delta : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 }, scale_delta : libremetaverse_types::Vector3 { x + : - 0.008_f32, y : - 0.006_f32, z : 0.015_f32 } } + ], + ), + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 188, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "More Square".to_owned(), + label_min: "Less Square".to_owned(), + max_value: 0.7_f32, + min_value: 0.0_f32, + name: "Square_Head".to_owned(), + param_id: 188, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 189, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "More Round".to_owned(), + label_min: "Less Round".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Round_Head".to_owned(), + param_id: 189, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 190, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "Hair Tilted Right".to_owned(), + label_max: "Tilt Right".to_owned(), + label_min: "Hair".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Hair_Tilt_Right".to_owned(), + param_id: 190, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 191, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "Hair Tilted Left".to_owned(), + label_max: "Tilt Left".to_owned(), + label_min: "Hair".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Hair_Tilt_Left".to_owned(), + param_id: 191, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 192, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "Part Bangs".to_owned(), + label_max: "Part Bangs".to_owned(), + label_min: "No Part".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Bangs_Part_Middle".to_owned(), + param_id: 192, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 193, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.5_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : true, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.5_f32, param_id : 188 }, + DrivenParamInfo { has_range : true, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.5_f32, param_id : 642 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.5_f32, min2 : 1.0_f32, param_id : 189 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.5_f32, min2 : 1.0_f32, param_id : 643 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 30193 } + ], + ), + drivers: Some(vec![188, 642, 189, 643, 30193]), + group: 0, + is_bump_attribute: false, + label: "Head Shape".to_owned(), + label_max: "More Round".to_owned(), + label_min: "More Square".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Head Shape".to_owned(), + param_id: 193, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 194, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Eyes Spread".to_owned(), + label_min: "Eyes Together".to_owned(), + max_value: 2.0_f32, + min_value: -2.0_f32, + name: "Eye_Spread".to_owned(), + param_id: 194, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 195, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Eyes Spread".to_owned(), + label_min: "Eyes Together".to_owned(), + max_value: 1.0_f32, + min_value: -1.0_f32, + name: "EyeBone_Spread".to_owned(), + param_id: 195, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mEyeLeft".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.009_f32, + z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : "mEyeRight" + .to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : - 0.009_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyeAltLeft".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.009_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, + z : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyeAltRight".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : - 0.009_f32, z : 0.0_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceEyeLidLowerLeft".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.009_f32, + z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyeLidLowerRight".to_owned(), has_position_deformation + : true, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : - 0.009_f32, z : 0.0_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceEyeLidUpperLeft".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.009_f32, + z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyeLidUpperRight".to_owned(), has_position_deformation + : true, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : - 0.009_f32, z : 0.0_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceEyebrowInnerLeft".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.009_f32, + z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyebrowInnerRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : - + 0.009_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyebrowCenterLeft".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.009_f32, + z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyebrowCenterRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : - + 0.009_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyebrowOuterLeft".to_owned(), has_position_deformation + : true, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.005_f32, z : 0.0_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceEyebrowOuterRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : - + 0.005_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyecornerInnerLeft".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.008_f32, + z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyecornerInnerRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : - + 0.008_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } } + ], + ), + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 196, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 194 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 195 } + ], + ), + drivers: Some(vec![194, 195]), + group: 0, + is_bump_attribute: false, + label: "Eye Spacing".to_owned(), + label_max: "Far Set Eyes".to_owned(), + label_min: "Close Set Eyes".to_owned(), + max_value: 1.0_f32, + min_value: -2.0_f32, + name: "Eye Spacing".to_owned(), + param_id: 196, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 197, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "High Heels".to_owned(), + label_min: "No Heels".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Shoe_Heels".to_owned(), + param_id: 197, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mFootRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : - 0.08_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : "mFootLeft" + .to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : - 0.08_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mHindLimb4Left".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : - 0.08_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mHindLimb4Right".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : - 0.08_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } } + ], + ), + volume_morphs: None, + wearable: Some("shoes".to_owned()), + }, + ); + params + .insert( + 198, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 197 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 500 } + ], + ), + drivers: Some(vec![197, 500]), + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "High Heels".to_owned(), + label_min: "Low Heels".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Heel Height".to_owned(), + param_id: 198, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shoes".to_owned()), + }, + ); + params + .insert( + 300, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Express_Closed_Mouth".to_owned(), + param_id: 300, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 301, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Express_Tongue_Out".to_owned(), + param_id: 301, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 302, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Express_Surprise_Emote".to_owned(), + param_id: 302, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 303, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Express_Wink_Emote".to_owned(), + param_id: 303, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 304, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Express_Embarrassed_Emote".to_owned(), + param_id: 304, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 305, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Express_Shrug_Emote".to_owned(), + param_id: 305, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 306, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Express_Kiss".to_owned(), + param_id: 306, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 307, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Express_Bored_Emote".to_owned(), + param_id: 307, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 308, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Express_Repulsed_Emote".to_owned(), + param_id: 308, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 309, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Express_Disdain".to_owned(), + param_id: 309, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 310, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Express_Afraid_Emote".to_owned(), + param_id: 310, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 311, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Express_Worry_Emote".to_owned(), + param_id: 311, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 312, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Express_Cry_Emote".to_owned(), + param_id: 312, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 313, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Express_Sad_Emote".to_owned(), + param_id: 313, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 314, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Express_Anger_Emote".to_owned(), + param_id: 314, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 315, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Express_Frown".to_owned(), + param_id: 315, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 316, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Express_Laugh_Emote".to_owned(), + param_id: 316, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 317, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Express_Toothsmile".to_owned(), + param_id: 317, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 318, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Express_Smile".to_owned(), + param_id: 318, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 400, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "Hair Thickess".to_owned(), + label_max: "Bushy Hair".to_owned(), + label_min: "Cropped Hair".to_owned(), + max_value: 2.0_f32, + min_value: 0.0_f32, + name: "Displace_Hair_Facial".to_owned(), + param_id: 400, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 500, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "Heel Height".to_owned(), + label_max: "High Heels".to_owned(), + label_min: "Low Heels".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Shoe_Heel_Height".to_owned(), + param_id: 500, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shoes".to_owned()), + }, + ); + params + .insert( + 501, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "Platform Height".to_owned(), + label_max: "High Platforms".to_owned(), + label_min: "Low Platforms".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Shoe_Platform_Height".to_owned(), + param_id: 501, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shoes".to_owned()), + }, + ); + params + .insert( + 502, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "High Heels".to_owned(), + label_min: "No Heels".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Shoe_Platform".to_owned(), + param_id: 502, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mFootRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : - 0.07_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : "mFootLeft" + .to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : - 0.07_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mHindLimb4Left".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : - 0.07_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mHindLimb4Right".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : - 0.07_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } } + ], + ), + volume_morphs: None, + wearable: Some("shoes".to_owned()), + }, + ); + params + .insert( + 503, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 501 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 502 } + ], + ), + drivers: Some(vec![501, 502]), + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "High Platforms".to_owned(), + label_min: "Low Platforms".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Platform Height".to_owned(), + param_id: 503, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shoes".to_owned()), + }, + ); + params + .insert( + 505, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.5_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : true, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.5_f32, param_id : 26 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.5_f32, min2 : 1.0_f32, param_id : 28 }, + DrivenParamInfo { has_range : true, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.5_f32, param_id : 30505 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.5_f32, min2 : 1.0_f32, param_id : 31505 } + ], + ), + drivers: Some(vec![26, 28, 30505, 31505]), + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Fat Lips".to_owned(), + label_min: "Thin Lips".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Lip Thickness".to_owned(), + param_id: 505, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 506, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 20506 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 30506 } + ], + ), + drivers: Some(vec![20506, 30506]), + group: 0, + is_bump_attribute: false, + label: "Mouth Position".to_owned(), + label_max: "Low".to_owned(), + label_min: "High".to_owned(), + max_value: 2.0_f32, + min_value: -2.0_f32, + name: "Mouth_Height".to_owned(), + param_id: 506, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 507, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "Breast Buoyancy".to_owned(), + label_max: "More Gravity".to_owned(), + label_min: "Less Gravity".to_owned(), + max_value: 2.0_f32, + min_value: -1.5_f32, + name: "Breast_Gravity".to_owned(), + param_id: 507, + skeletal_distortions: None, + volume_morphs: Some( + vec![ + VolumeMorphInfo { bone_name : "LEFT_PEC".to_owned(), + has_position : true, has_scale : true, position_delta : + libremetaverse_types::Vector3 { x : 0.004_f32, y : 0.0_f32, + z : - 0.01_f32 }, scale_delta : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, VolumeMorphInfo { bone_name : "RIGHT_PEC" + .to_owned(), has_position : true, has_scale : true, + position_delta : libremetaverse_types::Vector3 { x : + 0.004_f32, y : 0.0_f32, z : - 0.01_f32 }, scale_delta : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } } + ], + ), + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 508, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "Platform Width".to_owned(), + label_max: "Wide".to_owned(), + label_min: "Narrow".to_owned(), + max_value: 2.0_f32, + min_value: -1.0_f32, + name: "Shoe_Platform_Width".to_owned(), + param_id: 508, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shoes".to_owned()), + }, + ); + params + .insert( + 509, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "Heel Shape".to_owned(), + label_max: "Pointy Heels".to_owned(), + label_min: "Default Heels".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Shoe_Heel_Point".to_owned(), + param_id: 509, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shoes".to_owned()), + }, + ); + params + .insert( + 510, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "Heel Shape".to_owned(), + label_max: "Thick Heels".to_owned(), + label_min: "default Heels".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Shoe_Heel_Thick".to_owned(), + param_id: 510, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shoes".to_owned()), + }, + ); + params + .insert( + 511, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "Toe Shape".to_owned(), + label_max: "Pointy Toe".to_owned(), + label_min: "Default Toe".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Shoe_Toe_Point".to_owned(), + param_id: 511, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shoes".to_owned()), + }, + ); + params + .insert( + 512, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "Toe Shape".to_owned(), + label_max: "Square Toe".to_owned(), + label_min: "Default Toe".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Shoe_Toe_Square".to_owned(), + param_id: 512, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shoes".to_owned()), + }, + ); + params + .insert( + 513, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.5_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : true, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.5_f32, param_id : 509 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.5_f32, min2 : 1.0_f32, param_id : 510 } + ], + ), + drivers: Some(vec![509, 510]), + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Thick Heels".to_owned(), + label_min: "Pointy Heels".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Heel Shape".to_owned(), + param_id: 513, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shoes".to_owned()), + }, + ); + params + .insert( + 514, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.5_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : true, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.5_f32, param_id : 511 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.5_f32, min2 : 1.0_f32, param_id : 512 } + ], + ), + drivers: Some(vec![511, 512]), + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Square".to_owned(), + label_min: "Pointy".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Toe Shape".to_owned(), + param_id: 514, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shoes".to_owned()), + }, + ); + params + .insert( + 515, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "Foot Size".to_owned(), + label_max: "Big".to_owned(), + label_min: "Small".to_owned(), + max_value: 3.0_f32, + min_value: -1.0_f32, + name: "Foot_Size".to_owned(), + param_id: 515, + skeletal_distortions: None, + volume_morphs: Some( + vec![ + VolumeMorphInfo { bone_name : "L_FOOT".to_owned(), + has_position : true, has_scale : true, position_delta : + libremetaverse_types::Vector3 { x : 0.01_f32, y : 0.0_f32, z + : 0.0_f32 }, scale_delta : libremetaverse_types::Vector3 { x + : 0.02_f32, y : 0.01_f32, z : 0.0_f32 } }, VolumeMorphInfo { + bone_name : "R_FOOT".to_owned(), has_position : true, + has_scale : true, position_delta : + libremetaverse_types::Vector3 { x : 0.01_f32, y : 0.0_f32, z + : 0.0_f32 }, scale_delta : libremetaverse_types::Vector3 { x + : 0.02_f32, y : 0.01_f32, z : 0.0_f32 } } + ], + ), + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 516, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "Pants Fit".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Displace_Loose_Lowerbody".to_owned(), + param_id: 516, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("pants".to_owned()), + }, + ); + params + .insert( + 517, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 20517 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 30517 } + ], + ), + drivers: Some(vec![20517, 30517]), + group: 0, + is_bump_attribute: false, + label: "Nose Width".to_owned(), + label_max: "Wide".to_owned(), + label_min: "Narrow".to_owned(), + max_value: 1.0_f32, + min_value: -0.5_f32, + name: "Wide_Nose".to_owned(), + param_id: 517, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 518, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "Eyelash Length".to_owned(), + label_max: "Long".to_owned(), + label_min: "Short".to_owned(), + max_value: 1.5_f32, + min_value: -0.3_f32, + name: "Eyelashes_Long".to_owned(), + param_id: 518, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 600, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.01_f32, + multiply_blend: false, + skip_if_zero: false, + tga_file: "shirt_sleeve_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.7_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 0.85_f32, + min_value: 0.0_f32, + name: "Sleeve Length Cloth".to_owned(), + param_id: 600, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shirt".to_owned()), + }, + ); + params + .insert( + 601, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.05_f32, + multiply_blend: true, + skip_if_zero: false, + tga_file: "shirt_bottom_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.8_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Shirt Bottom Cloth".to_owned(), + param_id: 601, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shirt".to_owned()), + }, + ); + params + .insert( + 602, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.05_f32, + multiply_blend: true, + skip_if_zero: false, + tga_file: "shirt_collar_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.8_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Collar Front Height Cloth".to_owned(), + param_id: 602, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shirt".to_owned()), + }, + ); + params + .insert( + 603, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.4_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 1042 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 1043 } + ], + ), + drivers: Some(vec![1042, 1043]), + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Long".to_owned(), + label_min: "Short".to_owned(), + max_value: 1.0_f32, + min_value: 0.01_f32, + name: "Sleeve Length".to_owned(), + param_id: 603, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("undershirt".to_owned()), + }, + ); + params + .insert( + 604, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.85_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 1044 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 1045 } + ], + ), + drivers: Some(vec![1044, 1045]), + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Long".to_owned(), + label_min: "Short".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Bottom".to_owned(), + param_id: 604, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("undershirt".to_owned()), + }, + ); + params + .insert( + 605, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.84_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 1046 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 1047 } + ], + ), + drivers: Some(vec![1046, 1047]), + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "High".to_owned(), + label_min: "Low".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Collar Front".to_owned(), + param_id: 605, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("undershirt".to_owned()), + }, + ); + params + .insert( + 606, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.8_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 1019 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 1039 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 1020 } + ], + ), + drivers: Some(vec![1019, 1039, 1020]), + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Long".to_owned(), + label_min: "Short".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Sleeve Length".to_owned(), + param_id: 606, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("jacket".to_owned()), + }, + ); + params + .insert( + 607, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.8_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 1021 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 1040 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 1022 } + ], + ), + drivers: Some(vec![1021, 1040, 1022]), + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "High".to_owned(), + label_min: "Low".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Collar Front".to_owned(), + param_id: 607, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("jacket".to_owned()), + }, + ); + params + .insert( + 608, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.8_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 620 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 1025 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 1037 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 621 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 1027 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 1033 } + ], + ), + drivers: Some(vec![620, 1025, 1037, 621, 1027, 1033]), + group: 0, + is_bump_attribute: false, + label: "Jacket Length".to_owned(), + label_max: "Long".to_owned(), + label_min: "Short".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "bottom length lower".to_owned(), + param_id: 608, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("jacket".to_owned()), + }, + ); + params + .insert( + 609, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.2_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 622 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 1026 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 1038 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 623 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 1028 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 1034 } + ], + ), + drivers: Some(vec![622, 1026, 1038, 623, 1028, 1034]), + group: 0, + is_bump_attribute: false, + label: "Open Front".to_owned(), + label_max: "Closed".to_owned(), + label_min: "Open".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "open jacket".to_owned(), + param_id: 609, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("jacket".to_owned()), + }, + ); + params + .insert( + 614, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.05_f32, + multiply_blend: false, + skip_if_zero: false, + tga_file: "pants_waist_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.8_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Waist Height Cloth".to_owned(), + param_id: 614, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("pants".to_owned()), + }, + ); + params + .insert( + 615, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.01_f32, + multiply_blend: false, + skip_if_zero: false, + tga_file: "pants_length_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.8_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Pants Length Cloth".to_owned(), + param_id: 615, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("pants".to_owned()), + }, + ); + params + .insert( + 616, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.1_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 1052 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 1053 } + ], + ), + drivers: Some(vec![1052, 1053]), + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Tall".to_owned(), + label_min: "Short".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Shoe Height".to_owned(), + param_id: 616, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shoes".to_owned()), + }, + ); + params + .insert( + 617, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.35_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 1050 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 1051 } + ], + ), + drivers: Some(vec![1050, 1051]), + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Long".to_owned(), + label_min: "Short".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Socks Length".to_owned(), + param_id: 617, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("socks".to_owned()), + }, + ); + params + .insert( + 619, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.3_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 1054 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 1055 } + ], + ), + drivers: Some(vec![1054, 1055]), + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Long".to_owned(), + label_min: "Short".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Pants Length".to_owned(), + param_id: 619, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("underpants".to_owned()), + }, + ); + params + .insert( + 620, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.01_f32, + multiply_blend: true, + skip_if_zero: false, + tga_file: "jacket_length_upper_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.8_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "low cut".to_owned(), + label_min: "hi cut".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "bottom length upper".to_owned(), + param_id: 620, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("jacket".to_owned()), + }, + ); + params + .insert( + 621, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.01_f32, + multiply_blend: false, + skip_if_zero: false, + tga_file: "jacket_length_lower_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.8_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "low cut".to_owned(), + label_min: "hi cut".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "bottom length lower".to_owned(), + param_id: 621, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("jacket".to_owned()), + }, + ); + params + .insert( + 622, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.01_f32, + multiply_blend: true, + skip_if_zero: false, + tga_file: "jacket_open_upper_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.8_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "open".to_owned(), + label_min: "closed".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "open upper".to_owned(), + param_id: 622, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("jacket".to_owned()), + }, + ); + params + .insert( + 623, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.01_f32, + multiply_blend: true, + skip_if_zero: false, + tga_file: "jacket_open_lower_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.8_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "closed".to_owned(), + label_min: "open".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "open lower".to_owned(), + param_id: 623, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("jacket".to_owned()), + }, + ); + params + .insert( + 624, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.8_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 1056 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 1057 } + ], + ), + drivers: Some(vec![1056, 1057]), + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "High".to_owned(), + label_min: "Low".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Pants Waist".to_owned(), + param_id: 624, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("underpants".to_owned()), + }, + ); + params + .insert( + 625, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "Cuff Flare".to_owned(), + label_max: "Flared Cuffs".to_owned(), + label_min: "Tight Cuffs".to_owned(), + max_value: 1.5_f32, + min_value: 0.0_f32, + name: "Leg_Pantflair".to_owned(), + param_id: 625, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("pants".to_owned()), + }, + ); + params + .insert( + 626, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "Chest Size".to_owned(), + label_max: "Large".to_owned(), + label_min: "Small".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Big_Chest".to_owned(), + param_id: 626, + skeletal_distortions: None, + volume_morphs: Some( + vec![ + VolumeMorphInfo { bone_name : "LEFT_PEC".to_owned(), + has_position : true, has_scale : true, position_delta : + libremetaverse_types::Vector3 { x : 0.038_f32, y : + 0.024_f32, z : - 0.016_f32 }, scale_delta : + libremetaverse_types::Vector3 { x : 0.0273_f32, y : + 0.0273_f32, z : 0.0273_f32 } }, VolumeMorphInfo { bone_name + : "RIGHT_PEC".to_owned(), has_position : true, has_scale : + true, position_delta : libremetaverse_types::Vector3 { x : + 0.038_f32, y : - 0.024_f32, z : - 0.016_f32 }, scale_delta : + libremetaverse_types::Vector3 { x : 0.0273_f32, y : + 0.0273_f32, z : 0.0273_f32 } } + ], + ), + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 627, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "Chest Size".to_owned(), + label_max: "Small".to_owned(), + label_min: "Large".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Small_Chest".to_owned(), + param_id: 627, + skeletal_distortions: None, + volume_morphs: Some( + vec![ + VolumeMorphInfo { bone_name : "LEFT_PEC".to_owned(), + has_position : true, has_scale : true, position_delta : + libremetaverse_types::Vector3 { x : - 0.01_f32, y : - + 0.01_f32, z : - 0.02_f32 }, scale_delta : + libremetaverse_types::Vector3 { x : - 0.05_f32, y : 0.0_f32, + z : 0.0_f32 } }, VolumeMorphInfo { bone_name : "RIGHT_PEC" + .to_owned(), has_position : true, has_scale : true, + position_delta : libremetaverse_types::Vector3 { x : - + 0.01_f32, y : 0.01_f32, z : - 0.02_f32 }, scale_delta : + libremetaverse_types::Vector3 { x : - 0.05_f32, y : 0.0_f32, + z : 0.0_f32 } } + ], + ), + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 628, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "Shirt Fit".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Displace_Loose_Upperbody".to_owned(), + param_id: 628, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shirt".to_owned()), + }, + ); + params + .insert( + 629, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.5_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : true, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.5_f32, param_id : 630 }, + DrivenParamInfo { has_range : true, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.5_f32, param_id : 644 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.5_f32, min2 : 1.0_f32, param_id : 631 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.5_f32, min2 : 1.0_f32, param_id : 645 }, + DrivenParamInfo { has_range : true, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.5_f32, param_id : 31629 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.5_f32, min2 : 1.0_f32, param_id : 32629 } + ], + ), + drivers: Some(vec![630, 644, 631, 645, 31629, 32629]), + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "More Sloped".to_owned(), + label_min: "More Vertical".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Forehead Angle".to_owned(), + param_id: 629, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 630, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "Round Forehead".to_owned(), + label_max: "More".to_owned(), + label_min: "Less".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Forehead_Round".to_owned(), + param_id: 630, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 631, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "Slanted Forehead".to_owned(), + label_max: "More".to_owned(), + label_min: "Less".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Forehead_Slant".to_owned(), + param_id: 631, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 632, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Express_Open_Mouth".to_owned(), + param_id: 632, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 633, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "Fat Head".to_owned(), + label_max: "Fat".to_owned(), + label_min: "Skinny".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Fat_Head".to_owned(), + param_id: 633, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 634, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "Fat Torso".to_owned(), + label_max: "fat".to_owned(), + label_min: "skinny".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Fat_Torso".to_owned(), + param_id: 634, + skeletal_distortions: None, + volume_morphs: Some( + vec![ + VolumeMorphInfo { bone_name : "CHEST".to_owned(), + has_position : true, has_scale : true, position_delta : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : - 0.03_f32 }, scale_delta : libremetaverse_types::Vector3 + { x : 0.02_f32, y : 0.03_f32, z : 0.03_f32 } }, + VolumeMorphInfo { bone_name : "PELVIS".to_owned(), + has_position : true, has_scale : true, position_delta : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : - 0.03_f32 }, scale_delta : libremetaverse_types::Vector3 + { x : 0.02_f32, y : 0.03_f32, z : 0.03_f32 } }, + VolumeMorphInfo { bone_name : "UPPER_BACK".to_owned(), + has_position : true, has_scale : true, position_delta : + libremetaverse_types::Vector3 { x : - 0.03_f32, y : 0.0_f32, + z : 0.0_f32 }, scale_delta : libremetaverse_types::Vector3 { + x : 0.01_f32, y : 0.03_f32, z : 0.0_f32 } }, VolumeMorphInfo + { bone_name : "LOWER_BACK".to_owned(), has_position : true, + has_scale : true, position_delta : + libremetaverse_types::Vector3 { x : - 0.06_f32, y : 0.0_f32, + z : 0.0_f32 }, scale_delta : libremetaverse_types::Vector3 { + x : 0.04_f32, y : 0.06_f32, z : 0.0_f32 } }, VolumeMorphInfo + { bone_name : "LEFT_HANDLE".to_owned(), has_position : true, + has_scale : false, position_delta : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.08_f32, z + : 0.0_f32 }, scale_delta : libremetaverse_types::Vector3 { x + : 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, VolumeMorphInfo { + bone_name : "RIGHT_HANDLE".to_owned(), has_position : true, + has_scale : false, position_delta : + libremetaverse_types::Vector3 { x : 0.0_f32, y : - 0.08_f32, + z : 0.0_f32 }, scale_delta : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, VolumeMorphInfo { + bone_name : "LEFT_PEC".to_owned(), has_position : true, + has_scale : true, position_delta : + libremetaverse_types::Vector3 { x : 0.0_f32, y : - + 0.005_f32, z : - 0.013_f32 }, scale_delta : + libremetaverse_types::Vector3 { x : 0.0367_f32, y : + 0.0367_f32, z : 0.016_f32 } }, VolumeMorphInfo { bone_name : + "RIGHT_PEC".to_owned(), has_position : true, has_scale : + true, position_delta : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.005_f32, z : - 0.013_f32 }, scale_delta : + libremetaverse_types::Vector3 { x : 0.0367_f32, y : + 0.0367_f32, z : 0.016_f32 } }, VolumeMorphInfo { bone_name : + "BELLY".to_owned(), has_position : true, has_scale : true, + position_delta : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : - 0.05_f32 }, scale_delta : + libremetaverse_types::Vector3 { x : 0.09_f32, y : 0.08_f32, + z : 0.07_f32 } }, VolumeMorphInfo { bone_name : "L_CLAVICLE" + .to_owned(), has_position : false, has_scale : true, + position_delta : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_delta : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.015_f32 } }, VolumeMorphInfo { bone_name : "L_UPPER_ARM" + .to_owned(), has_position : true, has_scale : true, + position_delta : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : - 0.02_f32 }, scale_delta : + libremetaverse_types::Vector3 { x : 0.02_f32, y : 0.0_f32, z + : 0.02_f32 } }, VolumeMorphInfo { bone_name : "L_LOWER_ARM" + .to_owned(), has_position : true, has_scale : true, + position_delta : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : - 0.01_f32 }, scale_delta : + libremetaverse_types::Vector3 { x : 0.01_f32, y : 0.0_f32, z + : 0.01_f32 } }, VolumeMorphInfo { bone_name : "R_CLAVICLE" + .to_owned(), has_position : false, has_scale : true, + position_delta : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_delta : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.015_f32 } }, VolumeMorphInfo { bone_name : "R_UPPER_ARM" + .to_owned(), has_position : true, has_scale : true, + position_delta : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : - 0.02_f32 }, scale_delta : + libremetaverse_types::Vector3 { x : 0.02_f32, y : 0.0_f32, z + : 0.02_f32 } }, VolumeMorphInfo { bone_name : "R_LOWER_ARM" + .to_owned(), has_position : true, has_scale : true, + position_delta : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : - 0.01_f32 }, scale_delta : + libremetaverse_types::Vector3 { x : 0.01_f32, y : 0.0_f32, z + : 0.01_f32 } }, VolumeMorphInfo { bone_name : "NECK" + .to_owned(), has_position : false, has_scale : true, + position_delta : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_delta : + libremetaverse_types::Vector3 { x : 0.015_f32, y : 0.01_f32, + z : 0.0_f32 } }, VolumeMorphInfo { bone_name : "HEAD" + .to_owned(), has_position : true, has_scale : true, + position_delta : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : - 0.01_f32 }, scale_delta : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.01_f32 } } + ], + ), + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 635, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "Fat Torso".to_owned(), + label_max: "fat".to_owned(), + label_min: "skinny".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Fat_Legs".to_owned(), + param_id: 635, + skeletal_distortions: None, + volume_morphs: Some( + vec![ + VolumeMorphInfo { bone_name : "PELVIS".to_owned(), + has_position : false, has_scale : true, position_delta : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 }, scale_delta : libremetaverse_types::Vector3 { x + : 0.03_f32, y : 0.06_f32, z : 0.0_f32 } }, VolumeMorphInfo { + bone_name : "R_UPPER_LEG".to_owned(), has_position : true, + has_scale : true, position_delta : + libremetaverse_types::Vector3 { x : 0.0_f32, y : - 0.02_f32, + z : 0.0_f32 }, scale_delta : libremetaverse_types::Vector3 { + x : 0.02_f32, y : 0.02_f32, z : 0.0_f32 } }, VolumeMorphInfo + { bone_name : "R_LOWER_LEG".to_owned(), has_position : + false, has_scale : true, position_delta : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 }, scale_delta : libremetaverse_types::Vector3 { x + : 0.01_f32, y : 0.01_f32, z : 0.0_f32 } }, VolumeMorphInfo { + bone_name : "L_UPPER_LEG".to_owned(), has_position : true, + has_scale : true, position_delta : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.02_f32, z + : 0.0_f32 }, scale_delta : libremetaverse_types::Vector3 { x + : 0.02_f32, y : 0.02_f32, z : 0.0_f32 } }, VolumeMorphInfo { + bone_name : "L_LOWER_LEG".to_owned(), has_position : false, + has_scale : true, position_delta : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 }, scale_delta : libremetaverse_types::Vector3 { x + : 0.01_f32, y : 0.01_f32, z : 0.0_f32 } } + ], + ), + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 637, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 633 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 634 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 635 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 851 } + ], + ), + drivers: Some(vec![633, 634, 635, 851]), + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "More Body Fat".to_owned(), + label_min: "Less Body Fat".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Body Fat".to_owned(), + param_id: 637, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 638, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "Pants Crotch".to_owned(), + label_max: "Low and Loose".to_owned(), + label_min: "High and Tight".to_owned(), + max_value: 1.3_f32, + min_value: 0.0_f32, + name: "Low_Crotch".to_owned(), + param_id: 638, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("pants".to_owned()), + }, + ); + params + .insert( + 640, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: -1.3_f32, + name: "Hair_Egg_Head".to_owned(), + param_id: 640, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 641, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: -0.5_f32, + name: "Hair_Squash_Stretch_Head".to_owned(), + param_id: 641, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 642, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Hair_Square_Head".to_owned(), + param_id: 642, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 643, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Hair_Round_Head".to_owned(), + param_id: 643, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 644, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Hair_Forehead_Round".to_owned(), + param_id: 644, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 645, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Hair_Forehead_Slant".to_owned(), + param_id: 645, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 646, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 640 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 186 }, + DrivenParamInfo { has_range : true, max1 : - 1.3_f32, max2 : + - 1.3_f32, min1 : - 1.3_f32, min2 : 1.0_f32, param_id : + 30646 } + ], + ), + drivers: Some(vec![640, 186, 30646]), + group: 0, + is_bump_attribute: false, + label: "Egg Head".to_owned(), + label_max: "Forehead Heavy".to_owned(), + label_min: "Chin Heavy".to_owned(), + max_value: 1.0_f32, + min_value: -1.3_f32, + name: "Egg_Head".to_owned(), + param_id: 646, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 647, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 641 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 187 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 30647 } + ], + ), + drivers: Some(vec![641, 187, 30647]), + group: 0, + is_bump_attribute: false, + label: "Head Stretch".to_owned(), + label_max: "Stretch Head".to_owned(), + label_min: "Squash Head".to_owned(), + max_value: 1.0_f32, + min_value: -0.5_f32, + name: "Squash_Stretch_Head".to_owned(), + param_id: 647, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 648, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "Torso Muscles".to_owned(), + label_max: "Scrawny".to_owned(), + label_min: "Regular".to_owned(), + max_value: 1.3_f32, + min_value: 0.0_f32, + name: "Scrawny_Torso".to_owned(), + param_id: 648, + skeletal_distortions: None, + volume_morphs: Some( + vec![ + VolumeMorphInfo { bone_name : "BELLY".to_owned(), + has_position : true, has_scale : true, position_delta : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 }, scale_delta : libremetaverse_types::Vector3 { x + : 0.0_f32, y : - 0.01_f32, z : 0.0_f32 } }, VolumeMorphInfo + { bone_name : "UPPER_BACK".to_owned(), has_position : true, + has_scale : true, position_delta : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 }, scale_delta : libremetaverse_types::Vector3 { x + : - 0.01_f32, y : - 0.01_f32, z : 0.0_f32 } }, + VolumeMorphInfo { bone_name : "CHEST".to_owned(), + has_position : true, has_scale : true, position_delta : + libremetaverse_types::Vector3 { x : 0.01_f32, y : 0.0_f32, z + : 0.0_f32 }, scale_delta : libremetaverse_types::Vector3 { x + : - 0.01_f32, y : - 0.01_f32, z : 0.0_f32 } }, + VolumeMorphInfo { bone_name : "L_CLAVICLE".to_owned(), + has_position : true, has_scale : true, position_delta : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : - 0.005_f32 }, scale_delta : libremetaverse_types::Vector3 + { x : 0.0_f32, y : - 0.03_f32, z : - 0.005_f32 } }, + VolumeMorphInfo { bone_name : "L_UPPER_ARM".to_owned(), + has_position : true, has_scale : true, position_delta : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 }, scale_delta : libremetaverse_types::Vector3 { x + : - 0.01_f32, y : - 0.01_f32, z : - 0.02_f32 } }, + VolumeMorphInfo { bone_name : "L_LOWER_ARM".to_owned(), + has_position : true, has_scale : true, position_delta : + libremetaverse_types::Vector3 { x : - 0.005_f32, y : + 0.0_f32, z : 0.0_f32 }, scale_delta : + libremetaverse_types::Vector3 { x : - 0.005_f32, y : + 0.0_f32, z : - 0.01_f32 } }, VolumeMorphInfo { bone_name : + "R_CLAVICLE".to_owned(), has_position : true, has_scale : + true, position_delta : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : - 0.005_f32 }, scale_delta : + libremetaverse_types::Vector3 { x : 0.0_f32, y : - 0.03_f32, + z : - 0.005_f32 } }, VolumeMorphInfo { bone_name : + "R_UPPER_ARM".to_owned(), has_position : true, has_scale : + true, position_delta : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_delta : + libremetaverse_types::Vector3 { x : - 0.01_f32, y : - + 0.01_f32, z : - 0.02_f32 } }, VolumeMorphInfo { bone_name : + "R_LOWER_ARM".to_owned(), has_position : true, has_scale : + true, position_delta : libremetaverse_types::Vector3 { x : - + 0.005_f32, y : 0.0_f32, z : 0.0_f32 }, scale_delta : + libremetaverse_types::Vector3 { x : - 0.005_f32, y : + 0.0_f32, z : - 0.01_f32 } } + ], + ), + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 649, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.5_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : true, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.5_f32, param_id : 648 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.5_f32, min2 : 1.0_f32, param_id : 107 } + ], + ), + drivers: Some(vec![648, 107]), + group: 0, + is_bump_attribute: false, + label: "Torso Muscles".to_owned(), + label_max: "More Muscular".to_owned(), + label_min: "Less Muscular".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Torso Muscles".to_owned(), + param_id: 649, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 650, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 20650 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 30650 } + ], + ), + drivers: Some(vec![20650, 30650]), + group: 0, + is_bump_attribute: false, + label: "Outer Eye Corner".to_owned(), + label_max: "Corner Up".to_owned(), + label_min: "Corner Down".to_owned(), + max_value: 1.2_f32, + min_value: -1.3_f32, + name: "Eyelid_Corner_Up".to_owned(), + param_id: 650, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 651, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "Scrawny Leg".to_owned(), + label_max: "Less Muscles".to_owned(), + label_min: "Regular Muscles".to_owned(), + max_value: 1.5_f32, + min_value: 0.0_f32, + name: "Scrawny_Legs".to_owned(), + param_id: 651, + skeletal_distortions: None, + volume_morphs: Some( + vec![ + VolumeMorphInfo { bone_name : "L_UPPER_LEG".to_owned(), + has_position : true, has_scale : true, position_delta : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 }, scale_delta : libremetaverse_types::Vector3 { x + : - 0.03_f32, y : - 0.03_f32, z : 0.0_f32 } }, + VolumeMorphInfo { bone_name : "L_LOWER_LEG".to_owned(), + has_position : true, has_scale : true, position_delta : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 }, scale_delta : libremetaverse_types::Vector3 { x + : - 0.015_f32, y : - 0.015_f32, z : 0.0_f32 } }, + VolumeMorphInfo { bone_name : "R_UPPER_LEG".to_owned(), + has_position : true, has_scale : true, position_delta : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 }, scale_delta : libremetaverse_types::Vector3 { x + : - 0.03_f32, y : - 0.03_f32, z : 0.0_f32 } }, + VolumeMorphInfo { bone_name : "R_LOWER_LEG".to_owned(), + has_position : true, has_scale : true, position_delta : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 }, scale_delta : libremetaverse_types::Vector3 { x + : - 0.015_f32, y : - 0.015_f32, z : 0.0_f32 } } + ], + ), + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 652, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.5_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : true, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.5_f32, param_id : 651 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.5_f32, min2 : 1.0_f32, param_id : 152 } + ], + ), + drivers: Some(vec![651, 152]), + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "More Muscular".to_owned(), + label_min: "Less Muscular".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Leg Muscles".to_owned(), + param_id: 652, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 653, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 20653 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 30653 } + ], + ), + drivers: Some(vec![20653, 30653]), + group: 0, + is_bump_attribute: false, + label: "Lip Fullness".to_owned(), + label_max: "More Full".to_owned(), + label_min: "Less Full".to_owned(), + max_value: 2.0_f32, + min_value: -1.0_f32, + name: "Tall_Lips".to_owned(), + param_id: 653, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 654, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "Toe Thickness".to_owned(), + label_max: "Thick Toe".to_owned(), + label_min: "Flat Toe".to_owned(), + max_value: 2.0_f32, + min_value: 0.0_f32, + name: "Shoe_Toe_Thick".to_owned(), + param_id: 654, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shoes".to_owned()), + }, + ); + params + .insert( + 655, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "Head Size".to_owned(), + label_max: "Big Head".to_owned(), + label_min: "Small Head".to_owned(), + max_value: 0.1_f32, + min_value: -0.25_f32, + name: "Head Size".to_owned(), + param_id: 655, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mFaceTeethLower".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 1.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceTeethUpper".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 1.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyecornerInnerLeft".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 1.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyecornerInnerRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 1.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceNoseBridge".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 1.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceNoseBase".to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 1.0_f32 } }, SkeletalBoneInfo { bone_name : "mSkull" + .to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.1_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 1.0_f32 } }, SkeletalBoneInfo { bone_name : "mHead" + .to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 1.0_f32 } }, SkeletalBoneInfo { bone_name : "mFaceRoot" + .to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 1.0_f32 } }, SkeletalBoneInfo { bone_name : "mEyeLeft" + .to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 1.0_f32 } }, SkeletalBoneInfo { bone_name : "mEyeRight" + .to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 1.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyeAltLeft".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : - 0.001_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 1.0_f32, y : 1.0_f32, z : 1.0_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceEyeAltRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : - 0.001_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 1.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceForeheadLeft".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 1.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceForeheadCenter".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 1.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceForeheadRight".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 1.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyebrowOuterLeft".to_owned(), has_position_deformation + : true, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, + z : 1.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyebrowCenterLeft".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 1.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyebrowInnerLeft".to_owned(), has_position_deformation + : true, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, + z : 1.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyebrowOuterRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 1.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyebrowCenterRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 1.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyebrowInnerRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 1.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyeLidUpperLeft".to_owned(), has_position_deformation + : true, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, + z : 1.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyeLidLowerLeft".to_owned(), has_position_deformation + : true, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, + z : 1.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyeLidUpperRight".to_owned(), has_position_deformation + : true, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, + z : 1.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyeLidLowerRight".to_owned(), has_position_deformation + : true, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, + z : 1.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceNoseLeft".to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 1.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceNoseCenter".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 1.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceNoseRight".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 1.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceCheekLowerLeft".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 1.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceCheekUpperLeft".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 1.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceCheekLowerRight".to_owned(), has_position_deformation + : true, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, + z : 1.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceCheekUpperRight".to_owned(), has_position_deformation + : true, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, + z : 1.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceTongueBase".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 1.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceTongueTip".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 1.0_f32 } }, SkeletalBoneInfo { bone_name : "mFaceJaw" + .to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 1.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceJawShaper".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 1.0_f32 } }, SkeletalBoneInfo { bone_name : "mFaceChin" + .to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 1.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceLipUpperLeft".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 1.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceLipUpperCenter".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 1.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceLipUpperRight".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 1.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceLipCornerLeft".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 1.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceLipCornerRight".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 1.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceLipLowerLeft".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 1.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceLipLowerCenter".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 1.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceLipLowerRight".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 1.0_f32 } } + ], + ), + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 656, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 20656 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 30656 } + ], + ), + drivers: Some(vec![20656, 30656]), + group: 0, + is_bump_attribute: false, + label: "Crooked Nose".to_owned(), + label_max: "Nose Right".to_owned(), + label_min: "Nose Left".to_owned(), + max_value: 2.0_f32, + min_value: -2.0_f32, + name: "Crooked_Nose".to_owned(), + param_id: 656, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 657, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "Mouth Corner".to_owned(), + label_max: "Corner Up".to_owned(), + label_min: "Corner Normal".to_owned(), + max_value: 1.4_f32, + min_value: 0.0_f32, + name: "Smile_Mouth".to_owned(), + param_id: 657, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 658, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "Mouth Corner".to_owned(), + label_max: "Corner Down".to_owned(), + label_min: "Corner Normal".to_owned(), + max_value: 1.2_f32, + min_value: 0.0_f32, + name: "Frown_Mouth".to_owned(), + param_id: 658, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 659, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.5_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : true, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.5_f32, param_id : 658 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.5_f32, min2 : 1.0_f32, param_id : 657 }, + DrivenParamInfo { has_range : true, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.5_f32, param_id : 30658 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.5_f32, min2 : 1.0_f32, param_id : 30657 } + ], + ), + drivers: Some(vec![658, 657, 30658, 30657]), + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Corner Up".to_owned(), + label_min: "Corner Down".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Mouth Corner".to_owned(), + param_id: 659, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 660, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "Shear Face".to_owned(), + label_max: "Shear Right".to_owned(), + label_min: "Shear Left".to_owned(), + max_value: 2.0_f32, + min_value: -2.0_f32, + name: "Shear_Head".to_owned(), + param_id: 660, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 661, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Eyes Shear Right Up".to_owned(), + label_min: "Eyes Shear Left Up".to_owned(), + max_value: 2.0_f32, + min_value: -2.0_f32, + name: "EyeBone_Head_Shear".to_owned(), + param_id: 661, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mEyeLeft".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.004_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : "mEyeRight" + .to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : - 0.004_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyeAltLeft".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.004_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, + z : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyeAltRight".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : - 0.004_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceNoseRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : - 0.004_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceNoseLeft".to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.004_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEar1Left".to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.004_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEar1Right".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : - 0.004_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceLipUpperLeft".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.004_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceLipUpperRight".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : - 0.004_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceLipLowerLeft".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.004_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceLipLowerRight".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : - 0.004_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceLipCornerRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : - 0.004_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceLipCornerLeft".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.004_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, + z : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceCheekLowerLeft".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.004_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, + z : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceCheekLowerRight".to_owned(), has_position_deformation + : true, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : - 0.004_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceCheekUpperLeft".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.004_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceCheekUpperRight".to_owned(), has_position_deformation + : true, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : - 0.004_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceEyeLidUpperLeft".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.004_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyeLidUpperRight".to_owned(), has_position_deformation + : true, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : - 0.004_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceEyeLidLowerLeft".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.004_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyeLidLowerRight".to_owned(), has_position_deformation + : true, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : - 0.004_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceEyebrowInnerLeft".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.004_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyebrowInnerRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : - 0.004_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyebrowCenterLeft".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.004_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyebrowCenterRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : - 0.004_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyebrowOuterLeft".to_owned(), has_position_deformation + : true, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : 0.004_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceEyebrowOuterRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : - 0.004_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyecornerInnerRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : - 0.004_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyecornerInnerLeft".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.004_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceForeheadLeft".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.004_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, + z : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceForeheadRight".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : - 0.004_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } } + ], + ), + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 662, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.5_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 660 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 661 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 774 } + ], + ), + drivers: Some(vec![660, 661, 774]), + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Shear Left Up".to_owned(), + label_min: "Shear Right Up".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Face Shear".to_owned(), + param_id: 662, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 663, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 20663 }, + DrivenParamInfo { has_range : true, max1 : - 2.0_f32, max2 : + - 2.0_f32, min1 : - 2.0_f32, min2 : 0.0_f32, param_id : + 31663 }, DrivenParamInfo { has_range : true, max1 : 2.0_f32, + max2 : 2.0_f32, min1 : 0.0_f32, min2 : 2.0_f32, param_id : + 32663 } + ], + ), + drivers: Some(vec![20663, 31663, 32663]), + group: 0, + is_bump_attribute: false, + label: "Shift Mouth".to_owned(), + label_max: "Shift Right".to_owned(), + label_min: "Shift Left".to_owned(), + max_value: 2.0_f32, + min_value: -2.0_f32, + name: "Shift_Mouth".to_owned(), + param_id: 663, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 664, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "Eye Pop".to_owned(), + label_max: "Pop Left Eye".to_owned(), + label_min: "Pop Right Eye".to_owned(), + max_value: 1.3_f32, + min_value: -1.3_f32, + name: "Pop_Eye".to_owned(), + param_id: 664, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 665, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 20665 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 30665 } + ], + ), + drivers: Some(vec![20665, 30665]), + group: 0, + is_bump_attribute: false, + label: "Jaw Jut".to_owned(), + label_max: "Underbite".to_owned(), + label_min: "Overbite".to_owned(), + max_value: 2.0_f32, + min_value: -2.0_f32, + name: "Jaw_Jut".to_owned(), + param_id: 665, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 666, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Hands_Relaxed_L".to_owned(), + param_id: 666, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 667, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Hands_Point_L".to_owned(), + param_id: 667, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 668, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Hands_Fist_L".to_owned(), + param_id: 668, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 669, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Hands_Relaxed_R".to_owned(), + param_id: 669, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 670, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Hands_Point_R".to_owned(), + param_id: 670, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 671, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Hands_Fist_R".to_owned(), + param_id: 671, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 672, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Hands_Typing".to_owned(), + param_id: 672, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 674, + VisualParam { + alpha_params: None, + color_params: None, + default_value: -0.3_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "Shear Back".to_owned(), + label_max: "Sheared Back".to_owned(), + label_min: "Full Back".to_owned(), + max_value: 2.0_f32, + min_value: -1.0_f32, + name: "Hair_Shear_Back".to_owned(), + param_id: 674, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 675, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Large Hands".to_owned(), + label_min: "Small Hands".to_owned(), + max_value: 0.3_f32, + min_value: -0.3_f32, + name: "Hand Size".to_owned(), + param_id: 675, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mWristRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 1.0_f32 } }, SkeletalBoneInfo { bone_name : "mWristLeft" + .to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 1.0_f32 } }, SkeletalBoneInfo { bone_name : + "mHandThumb1Right".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 1.0_f32 } }, SkeletalBoneInfo { bone_name : + "mHandThumb2Right".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 1.0_f32 } }, SkeletalBoneInfo { bone_name : + "mHandThumb3Right".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 1.0_f32 } }, SkeletalBoneInfo { bone_name : + "mHandIndex1Right".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 1.0_f32 } }, SkeletalBoneInfo { bone_name : + "mHandIndex2Right".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 1.0_f32 } }, SkeletalBoneInfo { bone_name : + "mHandIndex3Right".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 1.0_f32 } }, SkeletalBoneInfo { bone_name : + "mHandMiddle1Right".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 1.0_f32 } }, SkeletalBoneInfo { bone_name : + "mHandMiddle2Right".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 1.0_f32 } }, SkeletalBoneInfo { bone_name : + "mHandMiddle3Right".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 1.0_f32 } }, SkeletalBoneInfo { bone_name : + "mHandRing1Right".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 1.0_f32 } }, SkeletalBoneInfo { bone_name : + "mHandRing2Right".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 1.0_f32 } }, SkeletalBoneInfo { bone_name : + "mHandRing3Right".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 1.0_f32 } }, SkeletalBoneInfo { bone_name : + "mHandPinky1Right".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 1.0_f32 } }, SkeletalBoneInfo { bone_name : + "mHandPinky2Right".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 1.0_f32 } }, SkeletalBoneInfo { bone_name : + "mHandPinky3Right".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 1.0_f32 } }, SkeletalBoneInfo { bone_name : + "mHandThumb1Left".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 1.0_f32 } }, SkeletalBoneInfo { bone_name : + "mHandThumb2Left".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 1.0_f32 } }, SkeletalBoneInfo { bone_name : + "mHandThumb3Left".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 1.0_f32 } }, SkeletalBoneInfo { bone_name : + "mHandIndex1Left".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 1.0_f32 } }, SkeletalBoneInfo { bone_name : + "mHandIndex2Left".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 1.0_f32 } }, SkeletalBoneInfo { bone_name : + "mHandIndex3Left".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 1.0_f32 } }, SkeletalBoneInfo { bone_name : + "mHandMiddle1Left".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 1.0_f32 } }, SkeletalBoneInfo { bone_name : + "mHandMiddle2Left".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 1.0_f32 } }, SkeletalBoneInfo { bone_name : + "mHandMiddle3Left".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 1.0_f32 } }, SkeletalBoneInfo { bone_name : + "mHandRing1Left".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 1.0_f32 } }, SkeletalBoneInfo { bone_name : + "mHandRing2Left".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 1.0_f32 } }, SkeletalBoneInfo { bone_name : + "mHandRing3Left".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 1.0_f32 } }, SkeletalBoneInfo { bone_name : + "mHandPinky1Left".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 1.0_f32 } }, SkeletalBoneInfo { bone_name : + "mHandPinky2Left".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 1.0_f32 } }, SkeletalBoneInfo { bone_name : + "mHandPinky3Left".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 1.0_f32 } } + ], + ), + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 676, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 855 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 856 } + ], + ), + drivers: Some(vec![855, 856]), + group: 0, + is_bump_attribute: false, + label: "Love Handles".to_owned(), + label_max: "More Love".to_owned(), + label_min: "Less Love".to_owned(), + max_value: 2.0_f32, + min_value: -1.0_f32, + name: "Love_Handles".to_owned(), + param_id: 676, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 677, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "Torso Scrawny".to_owned(), + label_max: "Scrawny".to_owned(), + label_min: "Regular".to_owned(), + max_value: 1.3_f32, + min_value: 0.0_f32, + name: "Scrawny_Torso_Male".to_owned(), + param_id: 677, + skeletal_distortions: None, + volume_morphs: Some( + vec![ + VolumeMorphInfo { bone_name : "BELLY".to_owned(), + has_position : true, has_scale : true, position_delta : + libremetaverse_types::Vector3 { x : 0.01_f32, y : 0.0_f32, z + : 0.0_f32 }, scale_delta : libremetaverse_types::Vector3 { x + : - 0.01_f32, y : - 0.01_f32, z : 0.0_f32 } }, + VolumeMorphInfo { bone_name : "UPPER_BACK".to_owned(), + has_position : true, has_scale : true, position_delta : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 }, scale_delta : libremetaverse_types::Vector3 { x + : - 0.01_f32, y : - 0.01_f32, z : 0.0_f32 } }, + VolumeMorphInfo { bone_name : "CHEST".to_owned(), + has_position : true, has_scale : true, position_delta : + libremetaverse_types::Vector3 { x : 0.01_f32, y : 0.0_f32, z + : 0.0_f32 }, scale_delta : libremetaverse_types::Vector3 { x + : - 0.02_f32, y : - 0.02_f32, z : 0.0_f32 } }, + VolumeMorphInfo { bone_name : "L_CLAVICLE".to_owned(), + has_position : true, has_scale : true, position_delta : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : - 0.005_f32 }, scale_delta : libremetaverse_types::Vector3 + { x : 0.0_f32, y : - 0.03_f32, z : - 0.005_f32 } }, + VolumeMorphInfo { bone_name : "L_UPPER_ARM".to_owned(), + has_position : true, has_scale : true, position_delta : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 }, scale_delta : libremetaverse_types::Vector3 { x + : - 0.01_f32, y : - 0.01_f32, z : - 0.02_f32 } }, + VolumeMorphInfo { bone_name : "L_LOWER_ARM".to_owned(), + has_position : true, has_scale : true, position_delta : + libremetaverse_types::Vector3 { x : - 0.005_f32, y : + 0.0_f32, z : 0.0_f32 }, scale_delta : + libremetaverse_types::Vector3 { x : - 0.005_f32, y : + 0.0_f32, z : - 0.01_f32 } }, VolumeMorphInfo { bone_name : + "R_CLAVICLE".to_owned(), has_position : true, has_scale : + true, position_delta : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : - 0.005_f32 }, scale_delta : + libremetaverse_types::Vector3 { x : 0.0_f32, y : - 0.03_f32, + z : - 0.005_f32 } }, VolumeMorphInfo { bone_name : + "R_UPPER_ARM".to_owned(), has_position : true, has_scale : + true, position_delta : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_delta : + libremetaverse_types::Vector3 { x : - 0.01_f32, y : - + 0.01_f32, z : - 0.02_f32 } }, VolumeMorphInfo { bone_name : + "R_LOWER_ARM".to_owned(), has_position : true, has_scale : + true, position_delta : libremetaverse_types::Vector3 { x : - + 0.005_f32, y : 0.0_f32, z : 0.0_f32 }, scale_delta : + libremetaverse_types::Vector3 { x : - 0.005_f32, y : + 0.0_f32, z : - 0.01_f32 } } + ], + ), + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 678, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.5_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : true, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.5_f32, param_id : 677 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.5_f32, min2 : 1.0_f32, param_id : 106 } + ], + ), + drivers: Some(vec![677, 106]), + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "More Muscular".to_owned(), + label_min: "Less Muscular".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Torso Muscles".to_owned(), + param_id: 678, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 679, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "Eyeball Size".to_owned(), + label_max: "big eye".to_owned(), + label_min: "small eye".to_owned(), + max_value: 0.1_f32, + min_value: -0.25_f32, + name: "Eyeball_Size".to_owned(), + param_id: 679, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 680, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "Eyeball Size".to_owned(), + label_max: "big eye".to_owned(), + label_min: "small eye".to_owned(), + max_value: 0.1_f32, + min_value: -0.25_f32, + name: "Eyeball_Size".to_owned(), + param_id: 680, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 681, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "Eyeball Size".to_owned(), + label_max: "big eye".to_owned(), + label_min: "small eye".to_owned(), + max_value: 0.1_f32, + min_value: -0.25_f32, + name: "Eyeball_Size".to_owned(), + param_id: 681, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 682, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.5_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 679 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 694 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 680 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 681 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 655 } + ], + ), + drivers: Some(vec![679, 694, 680, 681, 655]), + group: 0, + is_bump_attribute: false, + label: "Head Size".to_owned(), + label_max: "Big Head".to_owned(), + label_min: "Small Head".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Head Size".to_owned(), + param_id: 682, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 683, + VisualParam { + alpha_params: None, + color_params: None, + default_value: -0.15_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Thick Neck".to_owned(), + label_min: "Skinny Neck".to_owned(), + max_value: 0.2_f32, + min_value: -0.4_f32, + name: "Neck Thickness".to_owned(), + param_id: 683, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mNeck".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 1.0_f32, y : 1.0_f32, z + : 0.0_f32 } } + ], + ), + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 684, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "Breast Cleavage".to_owned(), + label_max: "Join".to_owned(), + label_min: "Separate".to_owned(), + max_value: 1.3_f32, + min_value: -0.3_f32, + name: "Breast_Female_Cleavage".to_owned(), + param_id: 684, + skeletal_distortions: None, + volume_morphs: Some( + vec![ + VolumeMorphInfo { bone_name : "LEFT_PEC".to_owned(), + has_position : true, has_scale : true, position_delta : + libremetaverse_types::Vector3 { x : 0.0_f32, y : - + 0.026_f32, z : 0.0_f32 }, scale_delta : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, VolumeMorphInfo { bone_name : "RIGHT_PEC" + .to_owned(), has_position : true, has_scale : true, + position_delta : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.026_f32, z : 0.0_f32 }, scale_delta : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } } + ], + ), + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 685, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "Pectorals".to_owned(), + label_max: "Sunken Chest".to_owned(), + label_min: "Big Pectorals".to_owned(), + max_value: 1.1_f32, + min_value: -0.5_f32, + name: "Chest_Male_No_Pecs".to_owned(), + param_id: 685, + skeletal_distortions: None, + volume_morphs: Some( + vec![ + VolumeMorphInfo { bone_name : "LEFT_PEC".to_owned(), + has_position : true, has_scale : true, position_delta : + libremetaverse_types::Vector3 { x : - 0.03_f32, y : - + 0.024_f32, z : - 0.01_f32 }, scale_delta : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, VolumeMorphInfo { bone_name : "RIGHT_PEC" + .to_owned(), has_position : true, has_scale : true, + position_delta : libremetaverse_types::Vector3 { x : - + 0.03_f32, y : 0.024_f32, z : - 0.01_f32 }, scale_delta : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } } + ], + ), + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 686, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "Eye Size".to_owned(), + label_max: "Anime Eyes".to_owned(), + label_min: "Beady Eyes".to_owned(), + max_value: 2.0_f32, + min_value: -2.0_f32, + name: "Head_Eyes_Big".to_owned(), + param_id: 686, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 687, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "Big Eyeball".to_owned(), + label_max: "big eye".to_owned(), + label_min: "small eye".to_owned(), + max_value: 0.25_f32, + min_value: -0.25_f32, + name: "Eyeball_Size".to_owned(), + param_id: 687, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 688, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "Big Eyeball".to_owned(), + label_max: "big eye".to_owned(), + label_min: "small eye".to_owned(), + max_value: 0.25_f32, + min_value: -0.25_f32, + name: "Eyeball_Size".to_owned(), + param_id: 688, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 689, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Eyes Forward".to_owned(), + label_min: "Eyes Back".to_owned(), + max_value: 1.0_f32, + min_value: -1.0_f32, + name: "EyeBone_Big_Eyes".to_owned(), + param_id: 689, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mEyeLeft".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : - 0.005_f32, y : + 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : "mEyeRight" + .to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : - + 0.005_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyeAltLeft".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : - 0.005_f32, y : 0.0_f32, z : 0.0_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceEyeAltRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : - 0.005_f32, y : + 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyeLidLowerRight".to_owned(), has_position_deformation + : true, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.3_f32, + z : 0.7_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyeLidLowerLeft".to_owned(), has_position_deformation + : true, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.3_f32, + z : 0.7_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyeLidUpperRight".to_owned(), has_position_deformation + : true, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.3_f32, + z : 0.7_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyeLidUpperLeft".to_owned(), has_position_deformation + : true, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.3_f32, + z : 0.7_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyecornerInnerLeft".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : - 0.005_f32, y : - + 0.008_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyecornerInnerRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : - 0.005_f32, y : + 0.008_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } } + ], + ), + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 690, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.5_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 686 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 687 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 695 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 688 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 691 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 689 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 30689 } + ], + ), + drivers: Some(vec![686, 687, 695, 688, 691, 689, 30689]), + group: 0, + is_bump_attribute: false, + label: "Eye Size".to_owned(), + label_max: "Anime Eyes".to_owned(), + label_min: "Beady Eyes".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Eye Size".to_owned(), + param_id: 690, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 691, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "Big Eyeball".to_owned(), + label_max: "big eye".to_owned(), + label_min: "small eye".to_owned(), + max_value: 0.25_f32, + min_value: -0.25_f32, + name: "Eyeball_Size".to_owned(), + param_id: 691, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 692, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Long Legs".to_owned(), + label_min: "Short Legs".to_owned(), + max_value: 1.0_f32, + min_value: -1.0_f32, + name: "Leg Length".to_owned(), + param_id: 692, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mHipLeft".to_owned(), + has_position_deformation : false, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.2_f32 } }, SkeletalBoneInfo { bone_name : "mHipRight" + .to_owned(), has_position_deformation : false, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.2_f32 } }, SkeletalBoneInfo { bone_name : "mKneeRight" + .to_owned(), has_position_deformation : false, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.2_f32 } }, SkeletalBoneInfo { bone_name : "mKneeLeft" + .to_owned(), has_position_deformation : false, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.2_f32 } }, SkeletalBoneInfo { bone_name : + "mHindLimb1Left".to_owned(), has_position_deformation : + false, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, + z : 0.2_f32 } }, SkeletalBoneInfo { bone_name : + "mHindLimb1Right".to_owned(), has_position_deformation : + false, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, + z : 0.2_f32 } }, SkeletalBoneInfo { bone_name : + "mHindLimb2Right".to_owned(), has_position_deformation : + false, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, + z : 0.2_f32 } }, SkeletalBoneInfo { bone_name : + "mHindLimb2Left".to_owned(), has_position_deformation : + false, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, + z : 0.2_f32 } } + ], + ), + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 693, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.6_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Long arms".to_owned(), + label_min: "Short Arms".to_owned(), + max_value: 1.0_f32, + min_value: -1.0_f32, + name: "Arm Length".to_owned(), + param_id: 693, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mShoulderLeft".to_owned(), + has_position_deformation : false, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.2_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mShoulderRight".to_owned(), has_position_deformation : + false, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.2_f32, + z : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mElbowRight".to_owned(), has_position_deformation : false, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.3_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : "mElbowLeft" + .to_owned(), has_position_deformation : false, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.3_f32, z + : 0.0_f32 } } + ], + ), + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 694, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "Eyeball Size".to_owned(), + label_max: "big eye".to_owned(), + label_min: "small eye".to_owned(), + max_value: 0.1_f32, + min_value: -0.25_f32, + name: "Eyeball_Size".to_owned(), + param_id: 694, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 695, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "Big Eyeball".to_owned(), + label_max: "big eye".to_owned(), + label_min: "small eye".to_owned(), + max_value: 0.25_f32, + min_value: -0.25_f32, + name: "Eyeball_Size".to_owned(), + param_id: 695, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 700, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(245_u8) / + 255.0, g : f32::from(161_u8) / 255.0, b : f32::from(177_u8) + / 255.0, a : f32::from(200_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(216_u8) / + 255.0, g : f32::from(37_u8) / 255.0, b : f32::from(67_u8) / + 255.0, a : f32::from(200_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(178_u8) / + 255.0, g : f32::from(48_u8) / 255.0, b : f32::from(76_u8) / + 255.0, a : f32::from(200_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(68_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(11_u8) / 255.0, a + : f32::from(200_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(252_u8) / 255.0, g : f32::from(207_u8) / + 255.0, b : f32::from(184_u8) / 255.0, a : f32::from(200_u8) + / 255.0 }, libremetaverse_types::Color4 { r : + f32::from(241_u8) / 255.0, g : f32::from(136_u8) / 255.0, b + : f32::from(106_u8) / 255.0, a : f32::from(200_u8) / 255.0 + }, libremetaverse_types::Color4 { r : f32::from(208_u8) / + 255.0, g : f32::from(110_u8) / 255.0, b : f32::from(85_u8) / + 255.0, a : f32::from(200_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(106_u8) / + 255.0, g : f32::from(28_u8) / 255.0, b : f32::from(18_u8) / + 255.0, a : f32::from(200_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(58_u8) / 255.0, + g : f32::from(26_u8) / 255.0, b : f32::from(49_u8) / 255.0, + a : f32::from(200_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(14_u8) / 255.0, + g : f32::from(14_u8) / 255.0, b : f32::from(14_u8) / 255.0, + a : f32::from(200_u8) / 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 0.25_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Black".to_owned(), + label_min: "Pink".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Lipstick Color".to_owned(), + param_id: 700, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("skin".to_owned()), + }, + ); + params + .insert( + 701, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.05_f32, + multiply_blend: false, + skip_if_zero: true, + tga_file: "lipstick_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "More Lipstick".to_owned(), + label_min: "No Lipstick".to_owned(), + max_value: 0.9_f32, + min_value: 0.0_f32, + name: "Lipstick".to_owned(), + param_id: 701, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("skin".to_owned()), + }, + ); + params + .insert( + 702, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.2_f32, + multiply_blend: false, + skip_if_zero: true, + tga_file: "lipgloss_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Glossy".to_owned(), + label_min: "No Lipgloss".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Lipgloss".to_owned(), + param_id: 702, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("skin".to_owned()), + }, + ); + params + .insert( + 703, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.1_f32, + multiply_blend: false, + skip_if_zero: true, + tga_file: "eyeliner_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Full Eyeliner".to_owned(), + label_min: "No Eyeliner".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Eyeliner".to_owned(), + param_id: 703, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("skin".to_owned()), + }, + ); + params + .insert( + 704, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.3_f32, + multiply_blend: false, + skip_if_zero: true, + tga_file: "blush_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "More Blush".to_owned(), + label_min: "No Blush".to_owned(), + max_value: 0.9_f32, + min_value: 0.0_f32, + name: "Blush".to_owned(), + param_id: 704, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("skin".to_owned()), + }, + ); + params + .insert( + 705, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(253_u8) / + 255.0, g : f32::from(162_u8) / 255.0, b : f32::from(193_u8) + / 255.0, a : f32::from(200_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(247_u8) / + 255.0, g : f32::from(131_u8) / 255.0, b : f32::from(152_u8) + / 255.0, a : f32::from(200_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(213_u8) / + 255.0, g : f32::from(122_u8) / 255.0, b : f32::from(140_u8) + / 255.0, a : f32::from(200_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(253_u8) / + 255.0, g : f32::from(152_u8) / 255.0, b : f32::from(144_u8) + / 255.0, a : f32::from(200_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(236_u8) / + 255.0, g : f32::from(138_u8) / 255.0, b : f32::from(103_u8) + / 255.0, a : f32::from(200_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(195_u8) / + 255.0, g : f32::from(128_u8) / 255.0, b : f32::from(122_u8) + / 255.0, a : f32::from(200_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(148_u8) / + 255.0, g : f32::from(103_u8) / 255.0, b : f32::from(100_u8) + / 255.0, a : f32::from(200_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(168_u8) / + 255.0, g : f32::from(95_u8) / 255.0, b : f32::from(62_u8) / + 255.0, a : f32::from(200_u8) / 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 0.5_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Orange".to_owned(), + label_min: "Pink".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Blush Color".to_owned(), + param_id: 705, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("skin".to_owned()), + }, + ); + params + .insert( + 706, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(255_u8) / + 255.0, g : f32::from(255_u8) / 255.0, b : f32::from(255_u8) + / 255.0, a : f32::from(0_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(255_u8) / + 255.0, g : f32::from(255_u8) / 255.0, b : f32::from(255_u8) + / 255.0, a : f32::from(255_u8) / 255.0 } + ], + operation: crate::VisualColorOperation::Blend, + }), + ), + default_value: 0.6_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Opaque".to_owned(), + label_min: "Clear".to_owned(), + max_value: 1.0_f32, + min_value: 0.2_f32, + name: "Out Shdw Opacity".to_owned(), + param_id: 706, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("skin".to_owned()), + }, + ); + params + .insert( + 707, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.05_f32, + multiply_blend: false, + skip_if_zero: true, + tga_file: "eyeshadow_outer_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "More Eyeshadow".to_owned(), + label_min: "No Eyeshadow".to_owned(), + max_value: 0.7_f32, + min_value: 0.0_f32, + name: "Outer Shadow".to_owned(), + param_id: 707, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("skin".to_owned()), + }, + ); + params + .insert( + 708, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(252_u8) / + 255.0, g : f32::from(247_u8) / 255.0, b : f32::from(246_u8) + / 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(255_u8) / + 255.0, g : f32::from(206_u8) / 255.0, b : f32::from(206_u8) + / 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(233_u8) / + 255.0, g : f32::from(135_u8) / 255.0, b : f32::from(149_u8) + / 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(220_u8) / + 255.0, g : f32::from(168_u8) / 255.0, b : f32::from(192_u8) + / 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(228_u8) / + 255.0, g : f32::from(203_u8) / 255.0, b : f32::from(232_u8) + / 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(255_u8) / + 255.0, g : f32::from(234_u8) / 255.0, b : f32::from(195_u8) + / 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(230_u8) / + 255.0, g : f32::from(157_u8) / 255.0, b : f32::from(101_u8) + / 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(255_u8) / + 255.0, g : f32::from(147_u8) / 255.0, b : f32::from(86_u8) / + 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(228_u8) / + 255.0, g : f32::from(110_u8) / 255.0, b : f32::from(89_u8) / + 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(228_u8) / + 255.0, g : f32::from(150_u8) / 255.0, b : f32::from(120_u8) + / 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(223_u8) / + 255.0, g : f32::from(227_u8) / 255.0, b : f32::from(213_u8) + / 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(96_u8) / 255.0, + g : f32::from(116_u8) / 255.0, b : f32::from(87_u8) / 255.0, + a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(88_u8) / 255.0, + g : f32::from(143_u8) / 255.0, b : f32::from(107_u8) / + 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(194_u8) / + 255.0, g : f32::from(231_u8) / 255.0, b : f32::from(223_u8) + / 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(207_u8) / + 255.0, g : f32::from(227_u8) / 255.0, b : f32::from(234_u8) + / 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(41_u8) / 255.0, + g : f32::from(171_u8) / 255.0, b : f32::from(212_u8) / + 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(180_u8) / + 255.0, g : f32::from(137_u8) / 255.0, b : f32::from(130_u8) + / 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(173_u8) / + 255.0, g : f32::from(125_u8) / 255.0, b : f32::from(105_u8) + / 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(144_u8) / + 255.0, g : f32::from(95_u8) / 255.0, b : f32::from(98_u8) / + 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(115_u8) / + 255.0, g : f32::from(70_u8) / 255.0, b : f32::from(77_u8) / + 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(155_u8) / + 255.0, g : f32::from(78_u8) / 255.0, b : f32::from(47_u8) / + 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(239_u8) / + 255.0, g : f32::from(239_u8) / 255.0, b : f32::from(239_u8) + / 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(194_u8) / + 255.0, g : f32::from(194_u8) / 255.0, b : f32::from(194_u8) + / 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(120_u8) / + 255.0, g : f32::from(120_u8) / 255.0, b : f32::from(120_u8) + / 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(10_u8) / 255.0, + g : f32::from(10_u8) / 255.0, b : f32::from(10_u8) / 255.0, + a : f32::from(255_u8) / 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Dark".to_owned(), + label_min: "Light".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Out Shdw Color".to_owned(), + param_id: 708, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("skin".to_owned()), + }, + ); + params + .insert( + 709, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.2_f32, + multiply_blend: false, + skip_if_zero: true, + tga_file: "eyeshadow_inner_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "More Eyeshadow".to_owned(), + label_min: "No Eyeshadow".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Inner Shadow".to_owned(), + param_id: 709, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("skin".to_owned()), + }, + ); + params + .insert( + 710, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.1_f32, + multiply_blend: false, + skip_if_zero: true, + tga_file: "nailpolish_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Painted Nails".to_owned(), + label_min: "No Polish".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Nail Polish".to_owned(), + param_id: 710, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("skin".to_owned()), + }, + ); + params + .insert( + 711, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(255_u8) / + 255.0, g : f32::from(255_u8) / 255.0, b : f32::from(255_u8) + / 255.0, a : f32::from(0_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(255_u8) / + 255.0, g : f32::from(255_u8) / 255.0, b : f32::from(255_u8) + / 255.0, a : f32::from(255_u8) / 255.0 } + ], + operation: crate::VisualColorOperation::Blend, + }), + ), + default_value: 0.5_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Opaque".to_owned(), + label_min: "Clear".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Blush Opacity".to_owned(), + param_id: 711, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("skin".to_owned()), + }, + ); + params + .insert( + 712, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(252_u8) / + 255.0, g : f32::from(247_u8) / 255.0, b : f32::from(246_u8) + / 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(255_u8) / + 255.0, g : f32::from(206_u8) / 255.0, b : f32::from(206_u8) + / 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(233_u8) / + 255.0, g : f32::from(135_u8) / 255.0, b : f32::from(149_u8) + / 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(220_u8) / + 255.0, g : f32::from(168_u8) / 255.0, b : f32::from(192_u8) + / 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(228_u8) / + 255.0, g : f32::from(203_u8) / 255.0, b : f32::from(232_u8) + / 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(255_u8) / + 255.0, g : f32::from(234_u8) / 255.0, b : f32::from(195_u8) + / 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(230_u8) / + 255.0, g : f32::from(157_u8) / 255.0, b : f32::from(101_u8) + / 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(255_u8) / + 255.0, g : f32::from(147_u8) / 255.0, b : f32::from(86_u8) / + 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(228_u8) / + 255.0, g : f32::from(110_u8) / 255.0, b : f32::from(89_u8) / + 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(228_u8) / + 255.0, g : f32::from(150_u8) / 255.0, b : f32::from(120_u8) + / 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(223_u8) / + 255.0, g : f32::from(227_u8) / 255.0, b : f32::from(213_u8) + / 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(96_u8) / 255.0, + g : f32::from(116_u8) / 255.0, b : f32::from(87_u8) / 255.0, + a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(88_u8) / 255.0, + g : f32::from(143_u8) / 255.0, b : f32::from(107_u8) / + 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(194_u8) / + 255.0, g : f32::from(231_u8) / 255.0, b : f32::from(223_u8) + / 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(207_u8) / + 255.0, g : f32::from(227_u8) / 255.0, b : f32::from(234_u8) + / 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(41_u8) / 255.0, + g : f32::from(171_u8) / 255.0, b : f32::from(212_u8) / + 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(180_u8) / + 255.0, g : f32::from(137_u8) / 255.0, b : f32::from(130_u8) + / 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(173_u8) / + 255.0, g : f32::from(125_u8) / 255.0, b : f32::from(105_u8) + / 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(144_u8) / + 255.0, g : f32::from(95_u8) / 255.0, b : f32::from(98_u8) / + 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(115_u8) / + 255.0, g : f32::from(70_u8) / 255.0, b : f32::from(77_u8) / + 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(155_u8) / + 255.0, g : f32::from(78_u8) / 255.0, b : f32::from(47_u8) / + 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(239_u8) / + 255.0, g : f32::from(239_u8) / 255.0, b : f32::from(239_u8) + / 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(194_u8) / + 255.0, g : f32::from(194_u8) / 255.0, b : f32::from(194_u8) + / 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(120_u8) / + 255.0, g : f32::from(120_u8) / 255.0, b : f32::from(120_u8) + / 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(10_u8) / 255.0, + g : f32::from(10_u8) / 255.0, b : f32::from(10_u8) / 255.0, + a : f32::from(255_u8) / 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Dark".to_owned(), + label_min: "Light".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "In Shdw Color".to_owned(), + param_id: 712, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("skin".to_owned()), + }, + ); + params + .insert( + 713, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(255_u8) / + 255.0, g : f32::from(255_u8) / 255.0, b : f32::from(255_u8) + / 255.0, a : f32::from(0_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(255_u8) / + 255.0, g : f32::from(255_u8) / 255.0, b : f32::from(255_u8) + / 255.0, a : f32::from(255_u8) / 255.0 } + ], + operation: crate::VisualColorOperation::Blend, + }), + ), + default_value: 0.7_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Opaque".to_owned(), + label_min: "Clear".to_owned(), + max_value: 1.0_f32, + min_value: 0.2_f32, + name: "In Shdw Opacity".to_owned(), + param_id: 713, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("skin".to_owned()), + }, + ); + params + .insert( + 714, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(24_u8) / 255.0, + g : f32::from(98_u8) / 255.0, b : f32::from(40_u8) / 255.0, + a : f32::from(250_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(9_u8) / 255.0, + g : f32::from(100_u8) / 255.0, b : f32::from(127_u8) / + 255.0, a : f32::from(250_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(61_u8) / 255.0, + g : f32::from(93_u8) / 255.0, b : f32::from(134_u8) / 255.0, + a : f32::from(250_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(70_u8) / 255.0, + g : f32::from(29_u8) / 255.0, b : f32::from(27_u8) / 255.0, + a : f32::from(250_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(115_u8) / + 255.0, g : f32::from(75_u8) / 255.0, b : f32::from(65_u8) / + 255.0, a : f32::from(250_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(100_u8) / + 255.0, g : f32::from(100_u8) / 255.0, b : f32::from(100_u8) + / 255.0, a : f32::from(250_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(91_u8) / 255.0, + g : f32::from(80_u8) / 255.0, b : f32::from(74_u8) / 255.0, + a : f32::from(250_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(112_u8) / + 255.0, g : f32::from(42_u8) / 255.0, b : f32::from(76_u8) / + 255.0, a : f32::from(250_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(14_u8) / 255.0, + g : f32::from(14_u8) / 255.0, b : f32::from(14_u8) / 255.0, + a : f32::from(250_u8) / 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Black".to_owned(), + label_min: "Dark Green".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Eyeliner Color".to_owned(), + param_id: 714, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("skin".to_owned()), + }, + ); + params + .insert( + 715, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(255_u8) / + 255.0, g : f32::from(187_u8) / 255.0, b : f32::from(200_u8) + / 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(194_u8) / + 255.0, g : f32::from(102_u8) / 255.0, b : f32::from(127_u8) + / 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(227_u8) / + 255.0, g : f32::from(34_u8) / 255.0, b : f32::from(99_u8) / + 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(168_u8) / + 255.0, g : f32::from(41_u8) / 255.0, b : f32::from(60_u8) / + 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(97_u8) / 255.0, + g : f32::from(28_u8) / 255.0, b : f32::from(59_u8) / 255.0, + a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(234_u8) / + 255.0, g : f32::from(115_u8) / 255.0, b : f32::from(93_u8) / + 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(142_u8) / + 255.0, g : f32::from(58_u8) / 255.0, b : f32::from(47_u8) / + 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(114_u8) / + 255.0, g : f32::from(30_u8) / 255.0, b : f32::from(46_u8) / + 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(14_u8) / 255.0, + g : f32::from(14_u8) / 255.0, b : f32::from(14_u8) / 255.0, + a : f32::from(255_u8) / 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Black".to_owned(), + label_min: "Pink".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Nail Polish Color".to_owned(), + param_id: 715, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("skin".to_owned()), + }, + ); + params + .insert( + 750, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.7_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 1002 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 1003 } + ], + ), + drivers: Some(vec![1002, 1003]), + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Dense".to_owned(), + label_min: "Sparse".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Eyebrow Density".to_owned(), + param_id: 750, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 751, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(255_u8) / + 255.0, g : f32::from(255_u8) / 255.0, b : f32::from(255_u8) + / 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(255_u8) / + 255.0, g : f32::from(255_u8) / 255.0, b : f32::from(255_u8) + / 255.0, a : f32::from(30_u8) / 255.0 } + ], + operation: crate::VisualColorOperation::Blend, + }), + ), + default_value: 0.7_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Shadow hair".to_owned(), + label_min: "Dense hair".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "5 O'Clock Shadow".to_owned(), + param_id: 751, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 752, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.5_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : true, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.2_f32, param_id : 751 }, + DrivenParamInfo { has_range : true, max1 : 0.0_f32, max2 : + 0.2_f32, min1 : 0.0_f32, min2 : 0.6_f32, param_id : 1012 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.2_f32, min2 : 1.0_f32, param_id : 400 } + ], + ), + drivers: Some(vec![751, 1012, 400]), + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Bushy Hair".to_owned(), + label_min: "5 O'Clock Shadow".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Hair Thickness".to_owned(), + param_id: 752, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 753, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 850 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 854 } + ], + ), + drivers: Some(vec![850, 854]), + group: 0, + is_bump_attribute: false, + label: "Saddle Bags".to_owned(), + label_max: "More Saddle".to_owned(), + label_min: "Less Saddle".to_owned(), + max_value: 3.0_f32, + min_value: -0.5_f32, + name: "Saddlebags".to_owned(), + param_id: 753, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 754, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "Taper Back".to_owned(), + label_max: "Narrow Back".to_owned(), + label_min: "Wide Back".to_owned(), + max_value: 2.0_f32, + min_value: -1.0_f32, + name: "Hair_Taper_Back".to_owned(), + param_id: 754, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 755, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.05_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "Taper Front".to_owned(), + label_max: "Narrow Front".to_owned(), + label_min: "Wide Front".to_owned(), + max_value: 1.5_f32, + min_value: -1.5_f32, + name: "Hair_Taper_Front".to_owned(), + param_id: 755, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 756, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Long Neck".to_owned(), + label_min: "Short Neck".to_owned(), + max_value: 1.0_f32, + min_value: -1.0_f32, + name: "Neck Length".to_owned(), + param_id: 756, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mNeck".to_owned(), + has_position_deformation : false, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.5_f32 } } + ], + ), + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 757, + VisualParam { + alpha_params: None, + color_params: None, + default_value: -1.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 871 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 30757 } + ], + ), + drivers: Some(vec![871, 30757]), + group: 0, + is_bump_attribute: false, + label: "Eyebrow Height".to_owned(), + label_max: "Lower".to_owned(), + label_min: "Higher".to_owned(), + max_value: 2.0_f32, + min_value: -4.0_f32, + name: "Lower_Eyebrows".to_owned(), + param_id: 757, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 758, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 20758 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 30758 } + ], + ), + drivers: Some(vec![20758, 30758]), + group: 0, + is_bump_attribute: false, + label: "Lower Bridge".to_owned(), + label_max: "High".to_owned(), + label_min: "Low".to_owned(), + max_value: 1.5_f32, + min_value: -1.5_f32, + name: "Lower_Bridge_Nose".to_owned(), + param_id: 758, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 759, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.5_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 20759 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 30759 } + ], + ), + drivers: Some(vec![20759, 30759]), + group: 0, + is_bump_attribute: false, + label: "Nostril Division".to_owned(), + label_max: "Low".to_owned(), + label_min: "High".to_owned(), + max_value: 1.5_f32, + min_value: -1.0_f32, + name: "Low_Septum_Nose".to_owned(), + param_id: 759, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 760, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 20760 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 30760 } + ], + ), + drivers: Some(vec![20760, 30760]), + group: 0, + is_bump_attribute: false, + label: "Jaw Angle".to_owned(), + label_max: "High Jaw".to_owned(), + label_min: "Low Jaw".to_owned(), + max_value: 2.0_f32, + min_value: -1.2_f32, + name: "Jaw_Angle".to_owned(), + param_id: 760, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 761, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "Hair Volume".to_owned(), + label_max: "More".to_owned(), + label_min: "Less".to_owned(), + max_value: 1.3_f32, + min_value: 0.0_f32, + name: "Hair_Volume_Small".to_owned(), + param_id: 761, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 762, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "Shear Front".to_owned(), + label_max: "Sheared Front".to_owned(), + label_min: "Full Front".to_owned(), + max_value: 3.0_f32, + min_value: 0.0_f32, + name: "Hair_Shear_Front".to_owned(), + param_id: 762, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 763, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.55_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : true, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.5_f32, param_id : 761 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.5_f32, min2 : 1.0_f32, param_id : 180 } + ], + ), + drivers: Some(vec![761, 180]), + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "More Volume".to_owned(), + label_min: "Less Volume".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Hair Volume".to_owned(), + param_id: 763, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 764, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 20764 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 30764 } + ], + ), + drivers: Some(vec![20764, 30764]), + group: 0, + is_bump_attribute: false, + label: "Lip Cleft Depth".to_owned(), + label_max: "Deep".to_owned(), + label_min: "Shallow".to_owned(), + max_value: 1.2_f32, + min_value: -0.5_f32, + name: "Lip_Cleft_Deep".to_owned(), + param_id: 764, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 765, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 20765 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 30765 } + ], + ), + drivers: Some(vec![20765, 30765]), + group: 0, + is_bump_attribute: false, + label: "Puffy Eyelids".to_owned(), + label_max: "Puffy".to_owned(), + label_min: "Flat".to_owned(), + max_value: 2.5_f32, + min_value: -0.3_f32, + name: "Puffy_Lower_Lids".to_owned(), + param_id: 765, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 766, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Hands_Salute_R".to_owned(), + param_id: 766, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 767, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "Eye Depth".to_owned(), + label_max: "Bug Eyes".to_owned(), + label_min: "Sunken Eyes".to_owned(), + max_value: 2.0_f32, + min_value: -2.0_f32, + name: "Bug_Eyed_Head".to_owned(), + param_id: 767, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 768, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Eyes Bugged".to_owned(), + label_min: "Eyes Sunken".to_owned(), + max_value: 2.0_f32, + min_value: -2.0_f32, + name: "EyeBone_Bug".to_owned(), + param_id: 768, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mEyeLeft".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.005_f32, y : 0.0_f32, + z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : "mEyeRight" + .to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : + 0.005_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyeAltLeft".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.005_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, + z : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyeAltRight".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.005_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, + z : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyeLidLowerLeft".to_owned(), has_position_deformation + : true, position_deformation : libremetaverse_types::Vector3 + { x : 0.005_f32, y : 0.0_f32, z : 0.0_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceEyeLidLowerRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.005_f32, y : 0.0_f32, + z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyecornerInnerLeft".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.005_f32, y : 0.0_f32, + z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyecornerInnerRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.005_f32, y : 0.0_f32, + z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyeLidUpperLeft".to_owned(), has_position_deformation + : true, position_deformation : libremetaverse_types::Vector3 + { x : 0.005_f32, y : 0.0_f32, z : 0.0_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceEyeLidUpperRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.005_f32, y : 0.0_f32, + z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyebrowInnerRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.002_f32, y : 0.0_f32, + z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyebrowInnerLeft".to_owned(), has_position_deformation + : true, position_deformation : libremetaverse_types::Vector3 + { x : 0.002_f32, y : 0.0_f32, z : 0.0_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceEyebrowCenterRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.001_f32, y : 0.0_f32, + z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyebrowCenterLeft".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.001_f32, y : 0.0_f32, + z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyebrowOuterRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0013_f32, y : 0.0_f32, + z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyebrowOuterLeft".to_owned(), has_position_deformation + : true, position_deformation : libremetaverse_types::Vector3 + { x : 0.0013_f32, y : 0.0_f32, z : 0.0_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } } + ], + ), + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 769, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.5_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 767 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 768 } + ], + ), + drivers: Some(vec![767, 768]), + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Bugged Eyes".to_owned(), + label_min: "Sunken Eyes".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Eye Depth".to_owned(), + param_id: 769, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 770, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "Shear Face".to_owned(), + label_max: "Long Head".to_owned(), + label_min: "Flat Head".to_owned(), + max_value: 1.0_f32, + min_value: -1.0_f32, + name: "Elongate_Head".to_owned(), + param_id: 770, + skeletal_distortions: None, + volume_morphs: Some( + vec![ + VolumeMorphInfo { bone_name : "HEAD".to_owned(), + has_position : false, has_scale : true, position_delta : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 }, scale_delta : libremetaverse_types::Vector3 { x + : 0.02_f32, y : 0.0_f32, z : 0.0_f32 } } + ], + ), + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 771, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: -1.0_f32, + name: "Elongate_Head_Hair".to_owned(), + param_id: 771, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 772, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Eyes Long Head".to_owned(), + label_min: "Eyes Short Head".to_owned(), + max_value: 1.0_f32, + min_value: -1.0_f32, + name: "EyeBone_Head_Elongate".to_owned(), + param_id: 772, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mEyeLeft".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.016_f32, y : 0.0_f32, + z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : "mEyeRight" + .to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : + 0.016_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } } + ], + ), + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 773, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.5_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 770 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 771 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 772 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 30772 }, + DrivenParamInfo { has_range : true, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.45_f32, param_id : 31772 + }, DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 + : 1.0_f32, min1 : 0.5_f32, min2 : 1.0_f32, param_id : 32772 + } + ], + ), + drivers: Some(vec![770, 771, 772, 30772, 31772, 32772]), + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Long Head".to_owned(), + label_min: "Flat Head".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Head Length".to_owned(), + param_id: 773, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 774, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 2.0_f32, + min_value: -2.0_f32, + name: "Shear_Head_Hair".to_owned(), + param_id: 774, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 775, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 776 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 777 } + ], + ), + drivers: Some(vec![776, 777]), + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "More Freckles".to_owned(), + label_min: "Less Freckles".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Body Freckles".to_owned(), + param_id: 775, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("skin".to_owned()), + }, + ); + params + .insert( + 776, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.6_f32, + multiply_blend: false, + skip_if_zero: true, + tga_file: "upperbodyfreckles_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "freckles upper".to_owned(), + param_id: 776, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("skin".to_owned()), + }, + ); + params + .insert( + 777, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.6_f32, + multiply_blend: false, + skip_if_zero: true, + tga_file: "bodyfreckles_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "freckles lower".to_owned(), + param_id: 777, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("skin".to_owned()), + }, + ); + params + .insert( + 778, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.05_f32, + multiply_blend: true, + skip_if_zero: false, + tga_file: "shirt_collar_back_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.8_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Collar Back Height Cloth".to_owned(), + param_id: 778, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shirt".to_owned()), + }, + ); + params + .insert( + 779, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.84_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 1048 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 1049 } + ], + ), + drivers: Some(vec![1048, 1049]), + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "High".to_owned(), + label_min: "Low".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Collar Back".to_owned(), + param_id: 779, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("undershirt".to_owned()), + }, + ); + params + .insert( + 780, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.8_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 1023 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 1041 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 1024 } + ], + ), + drivers: Some(vec![1023, 1041, 1024]), + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "High".to_owned(), + label_min: "Low".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Collar Back".to_owned(), + param_id: 780, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("jacket".to_owned()), + }, + ); + params + .insert( + 781, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.78_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 778 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 1016 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 1032 }, + DrivenParamInfo { has_range : true, max1 : 0.98_f32, max2 : + 1.0_f32, min1 : 0.0_f32, min2 : 1.0_f32, param_id : 903 } + ], + ), + drivers: Some(vec![778, 1016, 1032, 903]), + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "High".to_owned(), + label_min: "Low".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Collar Back".to_owned(), + param_id: 781, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shirt".to_owned()), + }, + ); + params + .insert( + 782, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Hair_Pigtails_Short".to_owned(), + param_id: 782, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 783, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Hair_Pigtails_Med".to_owned(), + param_id: 783, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 784, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Hair_Pigtails_Long".to_owned(), + param_id: 784, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 785, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : true, max1 : 0.1_f32, max2 : + 0.1_f32, min1 : 0.0_f32, min2 : 0.5_f32, param_id : 782 }, + DrivenParamInfo { has_range : true, max1 : 0.5_f32, max2 : + 0.5_f32, min1 : 0.1_f32, min2 : 0.75_f32, param_id : 783 }, + DrivenParamInfo { has_range : true, max1 : 0.75_f32, max2 : + 0.75_f32, min1 : 0.5_f32, min2 : 1.0_f32, param_id : 790 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.75_f32, min2 : 1.0_f32, param_id : 784 } + ], + ), + drivers: Some(vec![782, 783, 790, 784]), + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Long Pigtails".to_owned(), + label_min: "Short Pigtails".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Pigtails".to_owned(), + param_id: 785, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 786, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Hair_Ponytail_Short".to_owned(), + param_id: 786, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 787, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Hair_Ponytail_Med".to_owned(), + param_id: 787, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 788, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Hair_Ponytail_Long".to_owned(), + param_id: 788, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 789, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : true, max1 : 0.1_f32, max2 : + 0.1_f32, min1 : 0.0_f32, min2 : 0.66_f32, param_id : 786 }, + DrivenParamInfo { has_range : true, max1 : 0.66_f32, max2 : + 0.66_f32, min1 : 0.1_f32, min2 : 1.0_f32, param_id : 787 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.66_f32, min2 : 1.0_f32, param_id : 788 } + ], + ), + drivers: Some(vec![786, 787, 788]), + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Long Ponytail".to_owned(), + label_min: "Short Ponytail".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Ponytail".to_owned(), + param_id: 789, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 790, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Hair_Pigtails_Medlong".to_owned(), + param_id: 790, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 791, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Hands_Peace_R".to_owned(), + param_id: 791, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 792, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Hands_Spread_R".to_owned(), + param_id: 792, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 793, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "Longcuffs".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 3.0_f32, + min_value: 0.0_f32, + name: "Leg_Longcuffs".to_owned(), + param_id: 793, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("pants".to_owned()), + }, + ); + params + .insert( + 794, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "Butt Size".to_owned(), + label_max: "Small".to_owned(), + label_min: "Regular".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Small_Butt".to_owned(), + param_id: 794, + skeletal_distortions: None, + volume_morphs: Some( + vec![ + VolumeMorphInfo { bone_name : "PELVIS".to_owned(), + has_position : true, has_scale : true, position_delta : + libremetaverse_types::Vector3 { x : 0.01_f32, y : 0.0_f32, z + : 0.0_f32 }, scale_delta : libremetaverse_types::Vector3 { x + : - 0.01_f32, y : 0.0_f32, z : 0.0_f32 } }, VolumeMorphInfo + { bone_name : "BUTT".to_owned(), has_position : true, + has_scale : true, position_delta : + libremetaverse_types::Vector3 { x : 0.03_f32, y : 0.0_f32, z + : 0.0_f32 }, scale_delta : libremetaverse_types::Vector3 { x + : 0.0_f32, y : 0.0886_f32, z : 0.0_f32 } } + ], + ), + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 795, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.25_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : true, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.3_f32, param_id : 867 }, + DrivenParamInfo { has_range : true, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.3_f32, param_id : 794 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.3_f32, min2 : 1.0_f32, param_id : 151 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.3_f32, min2 : 1.0_f32, param_id : 852 } + ], + ), + drivers: Some(vec![867, 794, 151, 852]), + group: 0, + is_bump_attribute: false, + label: "Butt Size".to_owned(), + label_max: "Big Butt".to_owned(), + label_min: "Flat Butt".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Butt Size".to_owned(), + param_id: 795, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 796, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 20796 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 30796 } + ], + ), + drivers: Some(vec![20796, 30796]), + group: 0, + is_bump_attribute: false, + label: "Ear Tips".to_owned(), + label_max: "Pointy".to_owned(), + label_min: "Flat".to_owned(), + max_value: 3.0_f32, + min_value: -0.4_f32, + name: "Pointy_Ears".to_owned(), + param_id: 796, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 797, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "Fat Upper Lip".to_owned(), + label_max: "Fat Upper".to_owned(), + label_min: "Normal Upper".to_owned(), + max_value: 1.5_f32, + min_value: 0.0_f32, + name: "Fat_Upper_Lip".to_owned(), + param_id: 797, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 798, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "Fat Lower Lip".to_owned(), + label_max: "Fat Lower".to_owned(), + label_min: "Normal Lower".to_owned(), + max_value: 1.5_f32, + min_value: 0.0_f32, + name: "Fat_Lower_Lip".to_owned(), + param_id: 798, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 799, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.5_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : true, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.5_f32, param_id : 797 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.5_f32, min2 : 1.0_f32, param_id : 798 }, + DrivenParamInfo { has_range : true, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.5_f32, param_id : 30797 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.5_f32, min2 : 1.0_f32, param_id : 30798 } + ], + ), + drivers: Some(vec![797, 798, 30797, 30798]), + group: 0, + is_bump_attribute: false, + label: "Lip Ratio".to_owned(), + label_max: "More Lower Lip".to_owned(), + label_min: "More Upper Lip".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Lip Ratio".to_owned(), + param_id: 799, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 800, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.89_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 600 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 1013 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 1029 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.0_f32, min2 : 1.0_f32, param_id : 900 } + ], + ), + drivers: Some(vec![600, 1013, 1029, 900]), + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Long".to_owned(), + label_min: "Short".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Sleeve Length".to_owned(), + param_id: 800, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shirt".to_owned()), + }, + ); + params + .insert( + 801, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 1.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 601 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 1014 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 1030 }, + DrivenParamInfo { has_range : true, max1 : 0.98_f32, max2 : + 1.0_f32, min1 : 0.0_f32, min2 : 1.0_f32, param_id : 901 } + ], + ), + drivers: Some(vec![601, 1014, 1030, 901]), + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Long".to_owned(), + label_min: "Short".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Shirt Bottom".to_owned(), + param_id: 801, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shirt".to_owned()), + }, + ); + params + .insert( + 802, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.78_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 602 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 1015 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 1031 }, + DrivenParamInfo { has_range : true, max1 : 0.98_f32, max2 : + 1.0_f32, min1 : 0.0_f32, min2 : 1.0_f32, param_id : 902 } + ], + ), + drivers: Some(vec![602, 1015, 1031, 902]), + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "High".to_owned(), + label_min: "Low".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Collar Front".to_owned(), + param_id: 802, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shirt".to_owned()), + }, + ); + params + .insert( + 803, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(255_u8) / 255.0, g : f32::from(0_u8) / + 255.0, b : f32::from(0_u8) / 255.0, a : f32::from(255_u8) / + 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "shirt_red".to_owned(), + param_id: 803, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shirt".to_owned()), + }, + ); + params + .insert( + 804, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(0_u8) / 255.0, g : f32::from(255_u8) / + 255.0, b : f32::from(0_u8) / 255.0, a : f32::from(255_u8) / + 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "shirt_green".to_owned(), + param_id: 804, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shirt".to_owned()), + }, + ); + params + .insert( + 805, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(0_u8) / 255.0, g : f32::from(0_u8) / 255.0, + b : f32::from(255_u8) / 255.0, a : f32::from(255_u8) / 255.0 + } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "shirt_blue".to_owned(), + param_id: 805, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shirt".to_owned()), + }, + ); + params + .insert( + 806, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(255_u8) / 255.0, g : f32::from(0_u8) / + 255.0, b : f32::from(0_u8) / 255.0, a : f32::from(255_u8) / + 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "pants_red".to_owned(), + param_id: 806, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("pants".to_owned()), + }, + ); + params + .insert( + 807, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(0_u8) / 255.0, g : f32::from(255_u8) / + 255.0, b : f32::from(0_u8) / 255.0, a : f32::from(255_u8) / + 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "pants_green".to_owned(), + param_id: 807, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("pants".to_owned()), + }, + ); + params + .insert( + 808, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(0_u8) / 255.0, g : f32::from(0_u8) / 255.0, + b : f32::from(255_u8) / 255.0, a : f32::from(255_u8) / 255.0 + } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "pants_blue".to_owned(), + param_id: 808, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("pants".to_owned()), + }, + ); + params + .insert( + 809, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(255_u8) / 255.0, g : f32::from(0_u8) / + 255.0, b : f32::from(0_u8) / 255.0, a : f32::from(255_u8) / + 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "lower_jacket_red".to_owned(), + param_id: 809, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("jacket".to_owned()), + }, + ); + params + .insert( + 810, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(0_u8) / 255.0, g : f32::from(255_u8) / + 255.0, b : f32::from(0_u8) / 255.0, a : f32::from(255_u8) / + 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "lower_jacket_green".to_owned(), + param_id: 810, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("jacket".to_owned()), + }, + ); + params + .insert( + 811, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(0_u8) / 255.0, g : f32::from(0_u8) / 255.0, + b : f32::from(255_u8) / 255.0, a : f32::from(255_u8) / 255.0 + } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "lower_jacket_blue".to_owned(), + param_id: 811, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("jacket".to_owned()), + }, + ); + params + .insert( + 812, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(255_u8) / 255.0, g : f32::from(0_u8) / + 255.0, b : f32::from(0_u8) / 255.0, a : f32::from(255_u8) / + 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "shoes_red".to_owned(), + param_id: 812, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shoes".to_owned()), + }, + ); + params + .insert( + 813, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(0_u8) / 255.0, g : f32::from(255_u8) / + 255.0, b : f32::from(0_u8) / 255.0, a : f32::from(255_u8) / + 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "shoes_green".to_owned(), + param_id: 813, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shoes".to_owned()), + }, + ); + params + .insert( + 814, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 1.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 614 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 1017 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 1035 }, + DrivenParamInfo { has_range : true, max1 : 0.98_f32, max2 : + 1.0_f32, min1 : 0.0_f32, min2 : 1.0_f32, param_id : 914 } + ], + ), + drivers: Some(vec![614, 1017, 1035, 914]), + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "High".to_owned(), + label_min: "Low".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Waist Height".to_owned(), + param_id: 814, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("pants".to_owned()), + }, + ); + params + .insert( + 815, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.8_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : true, max1 : 0.9_f32, max2 : + 1.0_f32, min1 : 0.0_f32, min2 : 1.0_f32, param_id : 615 }, + DrivenParamInfo { has_range : true, max1 : 0.9_f32, max2 : + 1.0_f32, min1 : 0.0_f32, min2 : 1.0_f32, param_id : 1018 }, + DrivenParamInfo { has_range : true, max1 : 0.9_f32, max2 : + 1.0_f32, min1 : 0.0_f32, min2 : 1.0_f32, param_id : 1036 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.9_f32, min2 : 1.0_f32, param_id : 793 }, + DrivenParamInfo { has_range : true, max1 : 0.882_f32, max2 : + 1.0_f32, min1 : 0.0_f32, min2 : 1.0_f32, param_id : 915 } + ], + ), + drivers: Some(vec![615, 1018, 1036, 793, 915]), + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Long".to_owned(), + label_min: "Short".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Pants Length".to_owned(), + param_id: 815, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("pants".to_owned()), + }, + ); + params + .insert( + 816, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 516 }, + DrivenParamInfo { has_range : true, max1 : 0.5_f32, max2 : + 1.0_f32, min1 : 0.1_f32, min2 : 1.0_f32, param_id : 913 } + ], + ), + drivers: Some(vec![516, 913]), + group: 0, + is_bump_attribute: false, + label: "Pants Fit".to_owned(), + label_max: "Loose Pants".to_owned(), + label_min: "Tight Pants".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Loose Lower Clothing".to_owned(), + param_id: 816, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("pants".to_owned()), + }, + ); + params + .insert( + 817, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(0_u8) / 255.0, g : f32::from(0_u8) / 255.0, + b : f32::from(255_u8) / 255.0, a : f32::from(255_u8) / 255.0 + } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "shoes_blue".to_owned(), + param_id: 817, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shoes".to_owned()), + }, + ); + params + .insert( + 818, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(255_u8) / 255.0, g : f32::from(0_u8) / + 255.0, b : f32::from(0_u8) / 255.0, a : f32::from(255_u8) / + 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "socks_red".to_owned(), + param_id: 818, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("socks".to_owned()), + }, + ); + params + .insert( + 819, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(0_u8) / 255.0, g : f32::from(255_u8) / + 255.0, b : f32::from(0_u8) / 255.0, a : f32::from(255_u8) / + 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "socks_green".to_owned(), + param_id: 819, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("socks".to_owned()), + }, + ); + params + .insert( + 820, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(0_u8) / 255.0, g : f32::from(0_u8) / 255.0, + b : f32::from(255_u8) / 255.0, a : f32::from(255_u8) / 255.0 + } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "socks_blue".to_owned(), + param_id: 820, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("socks".to_owned()), + }, + ); + params + .insert( + 821, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(255_u8) / 255.0, g : f32::from(0_u8) / + 255.0, b : f32::from(0_u8) / 255.0, a : f32::from(255_u8) / + 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "undershirt_red".to_owned(), + param_id: 821, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("undershirt".to_owned()), + }, + ); + params + .insert( + 822, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(0_u8) / 255.0, g : f32::from(255_u8) / + 255.0, b : f32::from(0_u8) / 255.0, a : f32::from(255_u8) / + 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "undershirt_green".to_owned(), + param_id: 822, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("undershirt".to_owned()), + }, + ); + params + .insert( + 823, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(0_u8) / 255.0, g : f32::from(0_u8) / 255.0, + b : f32::from(255_u8) / 255.0, a : f32::from(255_u8) / 255.0 + } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "undershirt_blue".to_owned(), + param_id: 823, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("undershirt".to_owned()), + }, + ); + params + .insert( + 824, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(255_u8) / 255.0, g : f32::from(0_u8) / + 255.0, b : f32::from(0_u8) / 255.0, a : f32::from(255_u8) / + 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "underpants_red".to_owned(), + param_id: 824, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("underpants".to_owned()), + }, + ); + params + .insert( + 825, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(0_u8) / 255.0, g : f32::from(255_u8) / + 255.0, b : f32::from(0_u8) / 255.0, a : f32::from(255_u8) / + 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "underpants_green".to_owned(), + param_id: 825, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("underpants".to_owned()), + }, + ); + params + .insert( + 826, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(0_u8) / 255.0, g : f32::from(0_u8) / 255.0, + b : f32::from(255_u8) / 255.0, a : f32::from(255_u8) / 255.0 + } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "underpants_blue".to_owned(), + param_id: 826, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("underpants".to_owned()), + }, + ); + params + .insert( + 827, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(255_u8) / 255.0, g : f32::from(0_u8) / + 255.0, b : f32::from(0_u8) / 255.0, a : f32::from(255_u8) / + 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "gloves_red".to_owned(), + param_id: 827, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("gloves".to_owned()), + }, + ); + params + .insert( + 828, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 628 }, + DrivenParamInfo { has_range : true, max1 : 0.5_f32, max2 : + 1.0_f32, min1 : 0.1_f32, min2 : 1.0_f32, param_id : 899 } + ], + ), + drivers: Some(vec![628, 899]), + group: 0, + is_bump_attribute: false, + label: "Shirt Fit".to_owned(), + label_max: "Loose Shirt".to_owned(), + label_min: "Tight Shirt".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Loose Upper Clothing".to_owned(), + param_id: 828, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shirt".to_owned()), + }, + ); + params + .insert( + 829, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(0_u8) / 255.0, g : f32::from(255_u8) / + 255.0, b : f32::from(0_u8) / 255.0, a : f32::from(255_u8) / + 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "gloves_green".to_owned(), + param_id: 829, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("gloves".to_owned()), + }, + ); + params + .insert( + 830, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(0_u8) / 255.0, g : f32::from(0_u8) / 255.0, + b : f32::from(255_u8) / 255.0, a : f32::from(255_u8) / 255.0 + } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "gloves_blue".to_owned(), + param_id: 830, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("gloves".to_owned()), + }, + ); + params + .insert( + 831, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(255_u8) / 255.0, g : f32::from(0_u8) / + 255.0, b : f32::from(0_u8) / 255.0, a : f32::from(255_u8) / + 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "upper_jacket_red".to_owned(), + param_id: 831, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("jacket".to_owned()), + }, + ); + params + .insert( + 832, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(0_u8) / 255.0, g : f32::from(255_u8) / + 255.0, b : f32::from(0_u8) / 255.0, a : f32::from(255_u8) / + 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "upper_jacket_green".to_owned(), + param_id: 832, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("jacket".to_owned()), + }, + ); + params + .insert( + 833, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(0_u8) / 255.0, g : f32::from(0_u8) / 255.0, + b : f32::from(255_u8) / 255.0, a : f32::from(255_u8) / 255.0 + } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "upper_jacket_blue".to_owned(), + param_id: 833, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("jacket".to_owned()), + }, + ); + params + .insert( + 834, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 1.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.0_f32, min2 : 1.0_f32, param_id : 809 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.0_f32, min2 : 1.0_f32, param_id : 831 } + ], + ), + drivers: Some(vec![809, 831]), + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "jacket_red".to_owned(), + param_id: 834, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("jacket".to_owned()), + }, + ); + params + .insert( + 835, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 1.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.0_f32, min2 : 1.0_f32, param_id : 810 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.0_f32, min2 : 1.0_f32, param_id : 832 } + ], + ), + drivers: Some(vec![810, 832]), + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "jacket_green".to_owned(), + param_id: 835, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("jacket".to_owned()), + }, + ); + params + .insert( + 836, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 1.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.0_f32, min2 : 1.0_f32, param_id : 811 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.0_f32, min2 : 1.0_f32, param_id : 833 } + ], + ), + drivers: Some(vec![811, 833]), + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "jacket_blue".to_owned(), + param_id: 836, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("jacket".to_owned()), + }, + ); + params + .insert( + 840, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "Sleeve Looseness".to_owned(), + label_max: "Loose Sleeves".to_owned(), + label_min: "Tight Sleeves".to_owned(), + max_value: 1.5_f32, + min_value: 0.0_f32, + name: "Shirtsleeve_flair".to_owned(), + param_id: 840, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shirt".to_owned()), + }, + ); + params + .insert( + 841, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 853 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 847 } + ], + ), + drivers: Some(vec![853, 847]), + group: 0, + is_bump_attribute: false, + label: "Knee Angle".to_owned(), + label_max: "Bow Legged".to_owned(), + label_min: "Knock Kneed".to_owned(), + max_value: 1.0_f32, + min_value: -1.0_f32, + name: "Bowed_Legs".to_owned(), + param_id: 841, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 842, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Long Hips".to_owned(), + label_min: "Short hips".to_owned(), + max_value: 1.0_f32, + min_value: -1.0_f32, + name: "Hip Length".to_owned(), + param_id: 842, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mPelvis".to_owned(), + has_position_deformation : false, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.3_f32 } }, SkeletalBoneInfo { bone_name : + "mHindLimbsRoot".to_owned(), has_position_deformation : + false, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, + z : 0.3_f32 } }, SkeletalBoneInfo { bone_name : "mSpine1" + .to_owned(), has_position_deformation : false, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.3_f32 } }, SkeletalBoneInfo { bone_name : "mSpine2" + .to_owned(), has_position_deformation : false, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.3_f32 } } + ], + ), + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 843, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "Chest Size".to_owned(), + label_max: "None".to_owned(), + label_min: "Some".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "No_Chest".to_owned(), + param_id: 843, + skeletal_distortions: None, + volume_morphs: Some( + vec![ + VolumeMorphInfo { bone_name : "LEFT_PEC".to_owned(), + has_position : true, has_scale : true, position_delta : + libremetaverse_types::Vector3 { x : - 0.02_f32, y : - + 0.01_f32, z : - 0.03_f32 }, scale_delta : + libremetaverse_types::Vector3 { x : - 0.051_f32, y : + 0.0_f32, z : 0.0_f32 } }, VolumeMorphInfo { bone_name : + "RIGHT_PEC".to_owned(), has_position : true, has_scale : + true, position_delta : libremetaverse_types::Vector3 { x : - + 0.02_f32, y : 0.01_f32, z : - 0.03_f32 }, scale_delta : + libremetaverse_types::Vector3 { x : - 0.051_f32, y : + 0.0_f32, z : 0.0_f32 } } + ], + ), + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 844, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 1.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 1060 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 1061 } + ], + ), + drivers: Some(vec![1060, 1061]), + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Fingers".to_owned(), + label_min: "Fingerless".to_owned(), + max_value: 1.0_f32, + min_value: 0.01_f32, + name: "Glove Fingers".to_owned(), + param_id: 844, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("gloves".to_owned()), + }, + ); + params + .insert( + 845, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "poofy skirt".to_owned(), + label_max: "more poofy".to_owned(), + label_min: "less poofy".to_owned(), + max_value: 1.5_f32, + min_value: 0.0_f32, + name: "skirt_poofy".to_owned(), + param_id: 845, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("skirt".to_owned()), + }, + ); + params + .insert( + 846, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "loose skirt".to_owned(), + label_max: "loose".to_owned(), + label_min: "form fitting".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "skirt_loose".to_owned(), + param_id: 846, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("skirt".to_owned()), + }, + ); + params + .insert( + 847, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "legs skirt".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: -1.0_f32, + name: "skirt_bowlegs".to_owned(), + param_id: 847, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("skirt".to_owned()), + }, + ); + params + .insert( + 848, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.2_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "bustle skirt".to_owned(), + label_max: "more bustle".to_owned(), + label_min: "no bustle".to_owned(), + max_value: 2.0_f32, + min_value: 0.0_f32, + name: "skirt_bustle".to_owned(), + param_id: 848, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("skirt".to_owned()), + }, + ); + params + .insert( + 849, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "big belly skirt".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "skirt_belly".to_owned(), + param_id: 849, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("skirt".to_owned()), + }, + ); + params + .insert( + 850, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 3.0_f32, + min_value: -0.5_f32, + name: "skirt_saddlebags".to_owned(), + param_id: 850, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("skirt".to_owned()), + }, + ); + params + .insert( + 851, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "more".to_owned(), + label_min: "less".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "skirt_chubby".to_owned(), + param_id: 851, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("skirt".to_owned()), + }, + ); + params + .insert( + 852, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "bigbutt skirt".to_owned(), + label_max: "more".to_owned(), + label_min: "less".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "skirt_bigbutt".to_owned(), + param_id: 852, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("skirt".to_owned()), + }, + ); + params + .insert( + 853, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "Knee Angle".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: -1.0_f32, + name: "Bowed_Legs".to_owned(), + param_id: 853, + skeletal_distortions: None, + volume_morphs: Some( + vec![ + VolumeMorphInfo { bone_name : "L_UPPER_LEG".to_owned(), + has_position : true, has_scale : false, position_delta : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.03_f32, z + : 0.0_f32 }, scale_delta : libremetaverse_types::Vector3 { x + : 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, VolumeMorphInfo { + bone_name : "L_LOWER_LEG".to_owned(), has_position : true, + has_scale : false, position_delta : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.03_f32, z + : 0.0_f32 }, scale_delta : libremetaverse_types::Vector3 { x + : 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, VolumeMorphInfo { + bone_name : "R_UPPER_LEG".to_owned(), has_position : true, + has_scale : false, position_delta : + libremetaverse_types::Vector3 { x : 0.0_f32, y : - 0.03_f32, + z : 0.0_f32 }, scale_delta : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, VolumeMorphInfo { + bone_name : "R_LOWER_LEG".to_owned(), has_position : true, + has_scale : false, position_delta : + libremetaverse_types::Vector3 { x : 0.0_f32, y : - 0.03_f32, + z : 0.0_f32 }, scale_delta : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 } } + ], + ), + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 854, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 3.0_f32, + min_value: -0.5_f32, + name: "Saddlebags".to_owned(), + param_id: 854, + skeletal_distortions: None, + volume_morphs: Some( + vec![ + VolumeMorphInfo { bone_name : "PELVIS".to_owned(), + has_position : false, has_scale : true, position_delta : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 }, scale_delta : libremetaverse_types::Vector3 { x + : 0.0_f32, y : 0.025_f32, z : 0.0_f32 } } + ], + ), + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 855, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 2.0_f32, + min_value: -1.0_f32, + name: "Love_Handles".to_owned(), + param_id: 855, + skeletal_distortions: None, + volume_morphs: Some( + vec![ + VolumeMorphInfo { bone_name : "BELLY".to_owned(), + has_position : false, has_scale : true, position_delta : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 }, scale_delta : libremetaverse_types::Vector3 { x + : 0.0_f32, y : 0.02_f32, z : 0.0_f32 } }, VolumeMorphInfo { + bone_name : "LOWER_BACK".to_owned(), has_position : false, + has_scale : true, position_delta : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 }, scale_delta : libremetaverse_types::Vector3 { x + : 0.0_f32, y : 0.02_f32, z : 0.0_f32 } }, VolumeMorphInfo { + bone_name : "LEFT_HANDLE".to_owned(), has_position : true, + has_scale : false, position_delta : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.025_f32, + z : 0.0_f32 }, scale_delta : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, VolumeMorphInfo { + bone_name : "RIGHT_HANDLE".to_owned(), has_position : true, + has_scale : false, position_delta : + libremetaverse_types::Vector3 { x : 0.0_f32, y : - + 0.025_f32, z : 0.0_f32 }, scale_delta : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } } + ], + ), + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 856, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "more".to_owned(), + label_min: "less".to_owned(), + max_value: 2.0_f32, + min_value: -1.0_f32, + name: "skirt_lovehandles".to_owned(), + param_id: 856, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("skirt".to_owned()), + }, + ); + params + .insert( + 857, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "skirt_male".to_owned(), + param_id: 857, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("skirt".to_owned()), + }, + ); + params + .insert( + 858, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.0_f32, + multiply_blend: true, + skip_if_zero: false, + tga_file: "skirt_length_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.4_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Long".to_owned(), + label_min: "Short".to_owned(), + max_value: 1.0_f32, + min_value: 0.01_f32, + name: "Skirt Length".to_owned(), + param_id: 858, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("skirt".to_owned()), + }, + ); + params + .insert( + 859, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.0_f32, + multiply_blend: true, + skip_if_zero: false, + tga_file: "skirt_slit_front_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Closed Front".to_owned(), + label_min: "Open Front".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Slit Front".to_owned(), + param_id: 859, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("skirt".to_owned()), + }, + ); + params + .insert( + 860, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.0_f32, + multiply_blend: true, + skip_if_zero: false, + tga_file: "skirt_slit_back_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Closed Back".to_owned(), + label_min: "Open Back".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Slit Back".to_owned(), + param_id: 860, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("skirt".to_owned()), + }, + ); + params + .insert( + 861, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.0_f32, + multiply_blend: true, + skip_if_zero: false, + tga_file: "skirt_slit_left_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Closed Left".to_owned(), + label_min: "Open Left".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Slit Left".to_owned(), + param_id: 861, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("skirt".to_owned()), + }, + ); + params + .insert( + 862, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.0_f32, + multiply_blend: true, + skip_if_zero: false, + tga_file: "skirt_slit_right_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Closed Right".to_owned(), + label_min: "Open Right".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Slit Right".to_owned(), + param_id: 862, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("skirt".to_owned()), + }, + ); + params + .insert( + 863, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.333_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : true, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.2_f32, param_id : 866 }, + DrivenParamInfo { has_range : true, max1 : 0.5_f32, max2 : + 0.5_f32, min1 : 0.0_f32, min2 : 1.0_f32, param_id : 846 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.5_f32, min2 : 1.0_f32, param_id : 845 } + ], + ), + drivers: Some(vec![866, 846, 845]), + group: 0, + is_bump_attribute: false, + label: "Skirt Fit".to_owned(), + label_max: "Poofy Skirt".to_owned(), + label_min: "Tight Skirt".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "skirt_looseness".to_owned(), + param_id: 863, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("skirt".to_owned()), + }, + ); + params + .insert( + 866, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "tight skirt".to_owned(), + label_max: "loose".to_owned(), + label_min: "form fitting".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "skirt_tight".to_owned(), + param_id: 866, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("skirt".to_owned()), + }, + ); + params + .insert( + 867, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "tight skirt".to_owned(), + label_max: "loose".to_owned(), + label_min: "form fitting".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "skirt_smallbutt".to_owned(), + param_id: 867, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("skirt".to_owned()), + }, + ); + params + .insert( + 868, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 3, + is_bump_attribute: true, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Shirt Wrinkles".to_owned(), + param_id: 868, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shirt".to_owned()), + }, + ); + params + .insert( + 869, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 3, + is_bump_attribute: true, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Pants Wrinkles".to_owned(), + param_id: 869, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("pants".to_owned()), + }, + ); + params + .insert( + 870, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "Eyebrow Points".to_owned(), + label_max: "Pointy".to_owned(), + label_min: "Smooth".to_owned(), + max_value: 1.0_f32, + min_value: -0.5_f32, + name: "Pointy_Eyebrows".to_owned(), + param_id: 870, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 871, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "Eyebrow Height".to_owned(), + label_max: "Lower".to_owned(), + label_min: "Higher".to_owned(), + max_value: 2.0_f32, + min_value: -2.0_f32, + name: "Lower_Eyebrows".to_owned(), + param_id: 871, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 872, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "Eyebrow Arc".to_owned(), + label_max: "Arced".to_owned(), + label_min: "Flat".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Arced_Eyebrows".to_owned(), + param_id: 872, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 873, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.0_f32, + multiply_blend: false, + skip_if_zero: false, + tga_file: "".to_owned(), + }), + ), + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: true, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Bump base".to_owned(), + param_id: 873, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("skin".to_owned()), + }, + ); + params + .insert( + 874, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.0_f32, + multiply_blend: false, + skip_if_zero: false, + tga_file: "".to_owned(), + }), + ), + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: true, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Bump upperdef".to_owned(), + param_id: 874, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("skin".to_owned()), + }, + ); + params + .insert( + 875, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: true, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "jacket upper Wrinkles".to_owned(), + param_id: 875, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("jacket".to_owned()), + }, + ); + params + .insert( + 876, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: true, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "jacket upper Wrinkles".to_owned(), + param_id: 876, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("jacket".to_owned()), + }, + ); + params + .insert( + 877, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 875 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 876 } + ], + ), + drivers: Some(vec![875, 876]), + group: 3, + is_bump_attribute: false, + label: "Jacket Wrinkles".to_owned(), + label_max: "Wrinkles".to_owned(), + label_min: "No Wrinkles".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Jacket Wrinkles".to_owned(), + param_id: 877, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("jacket".to_owned()), + }, + ); + params + .insert( + 878, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.0_f32, + multiply_blend: false, + skip_if_zero: false, + tga_file: "".to_owned(), + }), + ), + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: true, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Bump upperdef".to_owned(), + param_id: 878, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("skin".to_owned()), + }, + ); + params + .insert( + 879, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 20879 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 30879 } + ], + ), + drivers: Some(vec![20879, 30879]), + group: 0, + is_bump_attribute: false, + label: "Package".to_owned(), + label_max: "Duffle Bag".to_owned(), + label_min: "Coin Purse".to_owned(), + max_value: 2.0_f32, + min_value: -0.5_f32, + name: "Male_Package".to_owned(), + param_id: 879, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 880, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 20880 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 30880 } + ], + ), + drivers: Some(vec![20880, 30880]), + group: 0, + is_bump_attribute: false, + label: "Inner Eye Corner".to_owned(), + label_max: "Corner Up".to_owned(), + label_min: "Corner Down".to_owned(), + max_value: 1.2_f32, + min_value: -1.3_f32, + name: "Eyelid_Inner_Corner_Up".to_owned(), + param_id: 880, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 899, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(0_u8) / 255.0 }, libremetaverse_types::Color4 { + r : f32::from(0_u8) / 255.0, g : f32::from(0_u8) / 255.0, b + : f32::from(0_u8) / 255.0, a : f32::from(80_u8) / 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Upper Clothes Shading".to_owned(), + param_id: 899, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shirt".to_owned()), + }, + ); + params + .insert( + 900, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.03_f32, + multiply_blend: false, + skip_if_zero: true, + tga_file: "shirt_sleeve_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.02_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 0.87_f32, + min_value: 0.02_f32, + name: "Sleeve Length Shadow".to_owned(), + param_id: 900, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shirt".to_owned()), + }, + ); + params + .insert( + 901, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.05_f32, + multiply_blend: true, + skip_if_zero: true, + tga_file: "shirt_bottom_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.02_f32, + name: "Shirt Shadow Bottom".to_owned(), + param_id: 901, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shirt".to_owned()), + }, + ); + params + .insert( + 902, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.02_f32, + multiply_blend: true, + skip_if_zero: true, + tga_file: "shirt_collar_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.02_f32, + name: "Collar Front Shadow Height".to_owned(), + param_id: 902, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shirt".to_owned()), + }, + ); + params + .insert( + 903, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.02_f32, + multiply_blend: true, + skip_if_zero: true, + tga_file: "shirt_collar_back_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.02_f32, + name: "Collar Back Shadow Height".to_owned(), + param_id: 903, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shirt".to_owned()), + }, + ); + params + .insert( + 913, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(0_u8) / 255.0 }, libremetaverse_types::Color4 { + r : f32::from(0_u8) / 255.0, g : f32::from(0_u8) / 255.0, b + : f32::from(0_u8) / 255.0, a : f32::from(80_u8) / 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Lower Clothes Shading".to_owned(), + param_id: 913, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("pants".to_owned()), + }, + ); + params + .insert( + 914, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.04_f32, + multiply_blend: false, + skip_if_zero: true, + tga_file: "pants_waist_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.02_f32, + name: "Waist Height Shadow".to_owned(), + param_id: 914, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("pants".to_owned()), + }, + ); + params + .insert( + 915, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.03_f32, + multiply_blend: false, + skip_if_zero: true, + tga_file: "pants_length_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.02_f32, + name: "Pants Length Shadow".to_owned(), + param_id: 915, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("pants".to_owned()), + }, + ); + params + .insert( + 921, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(255_u8) / 255.0, g : f32::from(0_u8) / + 255.0, b : f32::from(0_u8) / 255.0, a : f32::from(255_u8) / + 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "skirt_red".to_owned(), + param_id: 921, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("skirt".to_owned()), + }, + ); + params + .insert( + 922, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(0_u8) / 255.0, g : f32::from(255_u8) / + 255.0, b : f32::from(0_u8) / 255.0, a : f32::from(255_u8) / + 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "skirt_green".to_owned(), + param_id: 922, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("skirt".to_owned()), + }, + ); + params + .insert( + 923, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(0_u8) / 255.0, g : f32::from(0_u8) / 255.0, + b : f32::from(255_u8) / 255.0, a : f32::from(255_u8) / 255.0 + } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "skirt_blue".to_owned(), + param_id: 923, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("skirt".to_owned()), + }, + ); + params + .insert( + 924, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(255_u8) / 255.0, g : f32::from(0_u8) / + 255.0, b : f32::from(0_u8) / 255.0, a : f32::from(255_u8) / + 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "tattoo_eyes_red".to_owned(), + param_id: 924, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("universal".to_owned()), + }, + ); + params + .insert( + 925, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(0_u8) / 255.0, g : f32::from(255_u8) / + 255.0, b : f32::from(0_u8) / 255.0, a : f32::from(255_u8) / + 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "tattoo_eyes_green".to_owned(), + param_id: 925, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("universal".to_owned()), + }, + ); + params + .insert( + 926, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(0_u8) / 255.0, g : f32::from(0_u8) / 255.0, + b : f32::from(255_u8) / 255.0, a : f32::from(255_u8) / 255.0 + } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "tattoo_eyes_blue".to_owned(), + param_id: 926, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("universal".to_owned()), + }, + ); + params + .insert( + 1000, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.1_f32, + multiply_blend: false, + skip_if_zero: false, + tga_file: "eyebrows_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: true, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Eyebrow Size Bump".to_owned(), + param_id: 1000, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 1001, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.1_f32, + multiply_blend: false, + skip_if_zero: false, + tga_file: "eyebrows_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.5_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Eyebrow Size".to_owned(), + param_id: 1001, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 1002, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(255_u8) / + 255.0, g : f32::from(255_u8) / 255.0, b : f32::from(255_u8) + / 255.0, a : f32::from(0_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(255_u8) / + 255.0, g : f32::from(255_u8) / 255.0, b : f32::from(255_u8) + / 255.0, a : f32::from(255_u8) / 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: true, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Eyebrow Density Bump".to_owned(), + param_id: 1002, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 1003, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(255_u8) / + 255.0, g : f32::from(255_u8) / 255.0, b : f32::from(255_u8) + / 255.0, a : f32::from(0_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(255_u8) / + 255.0, g : f32::from(255_u8) / 255.0, b : f32::from(255_u8) + / 255.0, a : f32::from(255_u8) / 255.0 } + ], + operation: crate::VisualColorOperation::Blend, + }), + ), + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Eyebrow Density".to_owned(), + param_id: 1003, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 1004, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.05_f32, + multiply_blend: false, + skip_if_zero: true, + tga_file: "facehair_sideburns_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: true, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Sideburns bump".to_owned(), + param_id: 1004, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 1005, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.05_f32, + multiply_blend: false, + skip_if_zero: true, + tga_file: "facehair_sideburns_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Sideburns".to_owned(), + param_id: 1005, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 1006, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.05_f32, + multiply_blend: false, + skip_if_zero: true, + tga_file: "facehair_moustache_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: true, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Moustache bump".to_owned(), + param_id: 1006, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 1007, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.05_f32, + multiply_blend: false, + skip_if_zero: true, + tga_file: "facehair_moustache_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Moustache".to_owned(), + param_id: 1007, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 1008, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.1_f32, + multiply_blend: false, + skip_if_zero: true, + tga_file: "facehair_soulpatch_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: true, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Soulpatch bump".to_owned(), + param_id: 1008, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 1009, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.1_f32, + multiply_blend: false, + skip_if_zero: true, + tga_file: "facehair_soulpatch_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Soulpatch".to_owned(), + param_id: 1009, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 1010, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.03_f32, + multiply_blend: false, + skip_if_zero: true, + tga_file: "facehair_chincurtains_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: true, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Chin Curtains bump".to_owned(), + param_id: 1010, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 1011, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.03_f32, + multiply_blend: false, + skip_if_zero: true, + tga_file: "facehair_chincurtains_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Chin Curtains".to_owned(), + param_id: 1011, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 1012, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(255_u8) / + 255.0, g : f32::from(255_u8) / 255.0, b : f32::from(255_u8) + / 255.0, a : f32::from(255_u8) / 255.0 }, + libremetaverse_types::Color4 { r : f32::from(255_u8) / + 255.0, g : f32::from(255_u8) / 255.0, b : f32::from(255_u8) + / 255.0, a : f32::from(0_u8) / 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: true, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "5 O'Clock Shadow bump".to_owned(), + param_id: 1012, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("hair".to_owned()), + }, + ); + params + .insert( + 1013, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.01_f32, + multiply_blend: false, + skip_if_zero: false, + tga_file: "shirt_sleeve_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: true, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 0.85_f32, + min_value: 0.0_f32, + name: "Sleeve Length Cloth".to_owned(), + param_id: 1013, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shirt".to_owned()), + }, + ); + params + .insert( + 1014, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.05_f32, + multiply_blend: true, + skip_if_zero: false, + tga_file: "shirt_bottom_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: true, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Shirt Bottom Cloth".to_owned(), + param_id: 1014, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shirt".to_owned()), + }, + ); + params + .insert( + 1015, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.05_f32, + multiply_blend: true, + skip_if_zero: false, + tga_file: "shirt_collar_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: true, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Collar Front Height Cloth".to_owned(), + param_id: 1015, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shirt".to_owned()), + }, + ); + params + .insert( + 1016, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.05_f32, + multiply_blend: true, + skip_if_zero: false, + tga_file: "shirt_collar_back_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: true, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Collar Back Height Cloth".to_owned(), + param_id: 1016, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shirt".to_owned()), + }, + ); + params + .insert( + 1017, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.05_f32, + multiply_blend: false, + skip_if_zero: false, + tga_file: "pants_waist_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: true, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Waist Height Cloth".to_owned(), + param_id: 1017, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("pants".to_owned()), + }, + ); + params + .insert( + 1018, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.01_f32, + multiply_blend: false, + skip_if_zero: false, + tga_file: "pants_length_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: true, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Pants Length Cloth".to_owned(), + param_id: 1018, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("pants".to_owned()), + }, + ); + params + .insert( + 1019, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.01_f32, + multiply_blend: false, + skip_if_zero: false, + tga_file: "shirt_sleeve_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: true, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Jacket Sleeve Length bump".to_owned(), + param_id: 1019, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("jacket".to_owned()), + }, + ); + params + .insert( + 1020, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.01_f32, + multiply_blend: false, + skip_if_zero: false, + tga_file: "shirt_sleeve_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "jacket Sleeve Length".to_owned(), + param_id: 1020, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("jacket".to_owned()), + }, + ); + params + .insert( + 1021, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.05_f32, + multiply_blend: true, + skip_if_zero: false, + tga_file: "shirt_collar_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: true, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Jacket Collar Front bump".to_owned(), + param_id: 1021, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("jacket".to_owned()), + }, + ); + params + .insert( + 1022, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.05_f32, + multiply_blend: true, + skip_if_zero: false, + tga_file: "shirt_collar_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "jacket Collar Front".to_owned(), + param_id: 1022, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("jacket".to_owned()), + }, + ); + params + .insert( + 1023, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.05_f32, + multiply_blend: true, + skip_if_zero: false, + tga_file: "shirt_collar_back_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: true, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Jacket Collar Back bump".to_owned(), + param_id: 1023, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("jacket".to_owned()), + }, + ); + params + .insert( + 1024, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.05_f32, + multiply_blend: true, + skip_if_zero: false, + tga_file: "shirt_collar_back_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "jacket Collar Back".to_owned(), + param_id: 1024, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("jacket".to_owned()), + }, + ); + params + .insert( + 1025, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.01_f32, + multiply_blend: true, + skip_if_zero: false, + tga_file: "jacket_length_upper_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: true, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "jacket bottom length upper bump".to_owned(), + param_id: 1025, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("jacket".to_owned()), + }, + ); + params + .insert( + 1026, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.01_f32, + multiply_blend: true, + skip_if_zero: false, + tga_file: "jacket_open_upper_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: true, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "jacket open upper bump".to_owned(), + param_id: 1026, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("jacket".to_owned()), + }, + ); + params + .insert( + 1027, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.01_f32, + multiply_blend: false, + skip_if_zero: false, + tga_file: "jacket_length_lower_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: true, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "jacket bottom length lower bump".to_owned(), + param_id: 1027, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("jacket".to_owned()), + }, + ); + params + .insert( + 1028, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.01_f32, + multiply_blend: true, + skip_if_zero: false, + tga_file: "jacket_open_lower_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: true, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "jacket open lower bump".to_owned(), + param_id: 1028, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("jacket".to_owned()), + }, + ); + params + .insert( + 1029, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.01_f32, + multiply_blend: false, + skip_if_zero: false, + tga_file: "shirt_sleeve_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: true, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 0.85_f32, + min_value: 0.0_f32, + name: "Sleeve Length Cloth".to_owned(), + param_id: 1029, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shirt".to_owned()), + }, + ); + params + .insert( + 1030, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.05_f32, + multiply_blend: true, + skip_if_zero: false, + tga_file: "shirt_bottom_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: true, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Shirt Bottom Cloth".to_owned(), + param_id: 1030, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shirt".to_owned()), + }, + ); + params + .insert( + 1031, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.05_f32, + multiply_blend: true, + skip_if_zero: false, + tga_file: "shirt_collar_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: true, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Collar Front Height Cloth".to_owned(), + param_id: 1031, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shirt".to_owned()), + }, + ); + params + .insert( + 1032, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.05_f32, + multiply_blend: true, + skip_if_zero: false, + tga_file: "shirt_collar_back_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: true, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Collar Back Height Cloth".to_owned(), + param_id: 1032, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shirt".to_owned()), + }, + ); + params + .insert( + 1033, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.01_f32, + multiply_blend: false, + skip_if_zero: false, + tga_file: "jacket_length_lower_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: true, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "jacket bottom length lower bump".to_owned(), + param_id: 1033, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("jacket".to_owned()), + }, + ); + params + .insert( + 1034, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.01_f32, + multiply_blend: true, + skip_if_zero: false, + tga_file: "jacket_open_lower_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: true, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "jacket open lower bump".to_owned(), + param_id: 1034, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("jacket".to_owned()), + }, + ); + params + .insert( + 1035, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.05_f32, + multiply_blend: false, + skip_if_zero: false, + tga_file: "pants_waist_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: true, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Waist Height Cloth".to_owned(), + param_id: 1035, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("pants".to_owned()), + }, + ); + params + .insert( + 1036, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.01_f32, + multiply_blend: false, + skip_if_zero: false, + tga_file: "pants_length_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: true, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Pants Length Cloth".to_owned(), + param_id: 1036, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("pants".to_owned()), + }, + ); + params + .insert( + 1037, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.01_f32, + multiply_blend: true, + skip_if_zero: false, + tga_file: "jacket_length_upper_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: true, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "jacket bottom length upper bump".to_owned(), + param_id: 1037, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("jacket".to_owned()), + }, + ); + params + .insert( + 1038, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.01_f32, + multiply_blend: true, + skip_if_zero: false, + tga_file: "jacket_open_upper_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: true, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "jacket open upper bump".to_owned(), + param_id: 1038, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("jacket".to_owned()), + }, + ); + params + .insert( + 1039, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.01_f32, + multiply_blend: false, + skip_if_zero: false, + tga_file: "shirt_sleeve_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: true, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Jacket Sleeve Length bump".to_owned(), + param_id: 1039, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("jacket".to_owned()), + }, + ); + params + .insert( + 1040, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.05_f32, + multiply_blend: true, + skip_if_zero: false, + tga_file: "shirt_collar_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: true, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Jacket Collar Front bump".to_owned(), + param_id: 1040, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("jacket".to_owned()), + }, + ); + params + .insert( + 1041, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.05_f32, + multiply_blend: true, + skip_if_zero: false, + tga_file: "shirt_collar_back_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: true, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Jacket Collar Back bump".to_owned(), + param_id: 1041, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("jacket".to_owned()), + }, + ); + params + .insert( + 1042, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.01_f32, + multiply_blend: false, + skip_if_zero: false, + tga_file: "shirt_sleeve_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.4_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.01_f32, + name: "Sleeve Length".to_owned(), + param_id: 1042, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("undershirt".to_owned()), + }, + ); + params + .insert( + 1043, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.01_f32, + multiply_blend: false, + skip_if_zero: false, + tga_file: "shirt_sleeve_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.4_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: true, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.01_f32, + name: "Sleeve Length bump".to_owned(), + param_id: 1043, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("undershirt".to_owned()), + }, + ); + params + .insert( + 1044, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.05_f32, + multiply_blend: true, + skip_if_zero: false, + tga_file: "shirt_bottom_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.8_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Bottom".to_owned(), + param_id: 1044, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("undershirt".to_owned()), + }, + ); + params + .insert( + 1045, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.05_f32, + multiply_blend: true, + skip_if_zero: false, + tga_file: "shirt_bottom_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.8_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: true, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Bottom bump".to_owned(), + param_id: 1045, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("undershirt".to_owned()), + }, + ); + params + .insert( + 1046, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.05_f32, + multiply_blend: true, + skip_if_zero: false, + tga_file: "shirt_collar_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.8_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Collar Front".to_owned(), + param_id: 1046, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("undershirt".to_owned()), + }, + ); + params + .insert( + 1047, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.05_f32, + multiply_blend: true, + skip_if_zero: false, + tga_file: "shirt_collar_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.8_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: true, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Collar Front bump".to_owned(), + param_id: 1047, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("undershirt".to_owned()), + }, + ); + params + .insert( + 1048, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.05_f32, + multiply_blend: true, + skip_if_zero: false, + tga_file: "shirt_collar_back_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.8_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "High".to_owned(), + label_min: "Low".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Collar Back".to_owned(), + param_id: 1048, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("undershirt".to_owned()), + }, + ); + params + .insert( + 1049, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.05_f32, + multiply_blend: true, + skip_if_zero: false, + tga_file: "shirt_collar_back_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.8_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: true, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Collar Back bump".to_owned(), + param_id: 1049, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("undershirt".to_owned()), + }, + ); + params + .insert( + 1050, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.01_f32, + multiply_blend: false, + skip_if_zero: false, + tga_file: "shoe_height_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.35_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Socks Length bump".to_owned(), + param_id: 1050, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("socks".to_owned()), + }, + ); + params + .insert( + 1051, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.01_f32, + multiply_blend: false, + skip_if_zero: false, + tga_file: "shoe_height_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.35_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: true, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Socks Length bump".to_owned(), + param_id: 1051, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("socks".to_owned()), + }, + ); + params + .insert( + 1052, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.01_f32, + multiply_blend: false, + skip_if_zero: false, + tga_file: "shoe_height_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.1_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Shoe Height".to_owned(), + param_id: 1052, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shoes".to_owned()), + }, + ); + params + .insert( + 1053, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.01_f32, + multiply_blend: false, + skip_if_zero: false, + tga_file: "shoe_height_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.1_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: true, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Shoe Height bump".to_owned(), + param_id: 1053, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shoes".to_owned()), + }, + ); + params + .insert( + 1054, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.01_f32, + multiply_blend: false, + skip_if_zero: false, + tga_file: "pants_length_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.3_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Pants Length".to_owned(), + param_id: 1054, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("underpants".to_owned()), + }, + ); + params + .insert( + 1055, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.01_f32, + multiply_blend: false, + skip_if_zero: false, + tga_file: "pants_length_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.3_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: true, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Pants Length".to_owned(), + param_id: 1055, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("underpants".to_owned()), + }, + ); + params + .insert( + 1056, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.05_f32, + multiply_blend: false, + skip_if_zero: false, + tga_file: "pants_waist_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.8_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Pants Waist".to_owned(), + param_id: 1056, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("underpants".to_owned()), + }, + ); + params + .insert( + 1057, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.05_f32, + multiply_blend: false, + skip_if_zero: false, + tga_file: "pants_waist_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.8_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: true, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Pants Waist".to_owned(), + param_id: 1057, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("underpants".to_owned()), + }, + ); + params + .insert( + 1058, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.01_f32, + multiply_blend: false, + skip_if_zero: false, + tga_file: "glove_length_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.8_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.01_f32, + name: "Glove Length".to_owned(), + param_id: 1058, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("gloves".to_owned()), + }, + ); + params + .insert( + 1059, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.01_f32, + multiply_blend: false, + skip_if_zero: false, + tga_file: "glove_length_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 0.8_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: true, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.01_f32, + name: "Glove Length bump".to_owned(), + param_id: 1059, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("gloves".to_owned()), + }, + ); + params + .insert( + 1060, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.01_f32, + multiply_blend: true, + skip_if_zero: false, + tga_file: "gloves_fingers_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.01_f32, + name: "Glove Fingers".to_owned(), + param_id: 1060, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("gloves".to_owned()), + }, + ); + params + .insert( + 1061, + VisualParam { + alpha_params: Some( + Some(VisualAlphaParam { + domain: 0.01_f32, + multiply_blend: true, + skip_if_zero: false, + tga_file: "gloves_fingers_alpha.tga".to_owned(), + }), + ), + color_params: None, + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: true, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.01_f32, + name: "Glove Fingers bump".to_owned(), + param_id: 1061, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("gloves".to_owned()), + }, + ); + params + .insert( + 1062, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(255_u8) / 255.0, g : f32::from(0_u8) / + 255.0, b : f32::from(0_u8) / 255.0, a : f32::from(255_u8) / + 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "tattoo_head_red".to_owned(), + param_id: 1062, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("tattoo".to_owned()), + }, + ); + params + .insert( + 1063, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(0_u8) / 255.0, g : f32::from(255_u8) / + 255.0, b : f32::from(0_u8) / 255.0, a : f32::from(255_u8) / + 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "tattoo_head_green".to_owned(), + param_id: 1063, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("tattoo".to_owned()), + }, + ); + params + .insert( + 1064, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(0_u8) / 255.0, g : f32::from(0_u8) / 255.0, + b : f32::from(255_u8) / 255.0, a : f32::from(255_u8) / 255.0 + } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "tattoo_head_blue".to_owned(), + param_id: 1064, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("tattoo".to_owned()), + }, + ); + params + .insert( + 1065, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(255_u8) / 255.0, g : f32::from(0_u8) / + 255.0, b : f32::from(0_u8) / 255.0, a : f32::from(255_u8) / + 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "tattoo_upper_red".to_owned(), + param_id: 1065, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("tattoo".to_owned()), + }, + ); + params + .insert( + 1066, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(0_u8) / 255.0, g : f32::from(255_u8) / + 255.0, b : f32::from(0_u8) / 255.0, a : f32::from(255_u8) / + 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "tattoo_upper_green".to_owned(), + param_id: 1066, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("tattoo".to_owned()), + }, + ); + params + .insert( + 1067, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(0_u8) / 255.0, g : f32::from(0_u8) / 255.0, + b : f32::from(255_u8) / 255.0, a : f32::from(255_u8) / 255.0 + } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "tattoo_upper_blue".to_owned(), + param_id: 1067, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("tattoo".to_owned()), + }, + ); + params + .insert( + 1068, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(255_u8) / 255.0, g : f32::from(0_u8) / + 255.0, b : f32::from(0_u8) / 255.0, a : f32::from(255_u8) / + 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "tattoo_lower_red".to_owned(), + param_id: 1068, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("tattoo".to_owned()), + }, + ); + params + .insert( + 1069, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(0_u8) / 255.0, g : f32::from(255_u8) / + 255.0, b : f32::from(0_u8) / 255.0, a : f32::from(255_u8) / + 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "tattoo_lower_green".to_owned(), + param_id: 1069, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("tattoo".to_owned()), + }, + ); + params + .insert( + 1070, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(0_u8) / 255.0, g : f32::from(0_u8) / 255.0, + b : f32::from(255_u8) / 255.0, a : f32::from(255_u8) / 255.0 + } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "tattoo_lower_blue".to_owned(), + param_id: 1070, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("tattoo".to_owned()), + }, + ); + params + .insert( + 1071, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 1.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.0_f32, min2 : 1.0_f32, param_id : 1062 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.0_f32, min2 : 1.0_f32, param_id : 1065 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.0_f32, min2 : 1.0_f32, param_id : 1068 } + ], + ), + drivers: Some(vec![1062, 1065, 1068]), + group: 2, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "tattoo_red".to_owned(), + param_id: 1071, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("tattoo".to_owned()), + }, + ); + params + .insert( + 1072, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 1.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.0_f32, min2 : 1.0_f32, param_id : 1063 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.0_f32, min2 : 1.0_f32, param_id : 1066 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.0_f32, min2 : 1.0_f32, param_id : 1069 } + ], + ), + drivers: Some(vec![1063, 1066, 1069]), + group: 2, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "tattoo_green".to_owned(), + param_id: 1072, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("tattoo".to_owned()), + }, + ); + params + .insert( + 1073, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 1.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.0_f32, min2 : 1.0_f32, param_id : 1064 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.0_f32, min2 : 1.0_f32, param_id : 1067 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.0_f32, min2 : 1.0_f32, param_id : 1070 } + ], + ), + drivers: Some(vec![1064, 1067, 1070]), + group: 2, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "tattoo_blue".to_owned(), + param_id: 1073, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("tattoo".to_owned()), + }, + ); + params + .insert( + 1100, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 1200 } + ], + ), + drivers: Some(vec![1200]), + group: 1, + is_bump_attribute: false, + label: "Breast Physics UpDown Controller".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: -1.0_f32, + name: "Breast_Physics_UpDown_Controller".to_owned(), + param_id: 1100, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("physics".to_owned()), + }, + ); + params + .insert( + 1101, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 1201 } + ], + ), + drivers: Some(vec![1201]), + group: 1, + is_bump_attribute: false, + label: "Breast Physics InOut Controller".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: -1.0_f32, + name: "Breast_Physics_InOut_Controller".to_owned(), + param_id: 1101, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("physics".to_owned()), + }, + ); + params + .insert( + 1102, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 1202 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 1203 }, + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 1204 } + ], + ), + drivers: Some(vec![1202, 1203, 1204]), + group: 1, + is_bump_attribute: false, + label: "Belly Physics UpDown Controller".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: -1.0_f32, + name: "Belly_Physics_UpDown_Controller".to_owned(), + param_id: 1102, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("physics".to_owned()), + }, + ); + params + .insert( + 1103, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 1205 } + ], + ), + drivers: Some(vec![1205]), + group: 1, + is_bump_attribute: false, + label: "Butt Physics UpDown Controller".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: -1.0_f32, + name: "Butt_Physics_UpDown_Controller".to_owned(), + param_id: 1103, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 1104, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 1206 } + ], + ), + drivers: Some(vec![1206]), + group: 1, + is_bump_attribute: false, + label: "Butt Physics LeftRight Controller".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: -1.0_f32, + name: "Butt_Physics_LeftRight_Controller".to_owned(), + param_id: 1104, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 1105, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : false, max1 : 0.0_f32, max2 : + 0.0_f32, min1 : 0.0_f32, min2 : 0.0_f32, param_id : 1207 } + ], + ), + drivers: Some(vec![1207]), + group: 1, + is_bump_attribute: false, + label: "Breast Physics LeftRight Controller".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: -1.0_f32, + name: "Breast_Physics_LeftRight_Controller".to_owned(), + param_id: 1105, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 1200, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 3.0_f32, + min_value: -3.0_f32, + name: "Breast_Physics_UpDown_Driven".to_owned(), + param_id: 1200, + skeletal_distortions: None, + volume_morphs: Some( + vec![ + VolumeMorphInfo { bone_name : "LEFT_PEC".to_owned(), + has_position : true, has_scale : true, position_delta : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : - 0.01_f32 }, scale_delta : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, VolumeMorphInfo + { bone_name : "RIGHT_PEC".to_owned(), has_position : true, + has_scale : true, position_delta : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : - 0.01_f32 }, scale_delta : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 } } + ], + ), + wearable: Some("physics".to_owned()), + }, + ); + params + .insert( + 1201, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.25_f32, + min_value: -1.25_f32, + name: "Breast_Physics_InOut_Driven".to_owned(), + param_id: 1201, + skeletal_distortions: None, + volume_morphs: Some( + vec![ + VolumeMorphInfo { bone_name : "LEFT_PEC".to_owned(), + has_position : true, has_scale : true, position_delta : + libremetaverse_types::Vector3 { x : 0.0_f32, y : - + 0.026_f32, z : 0.0_f32 }, scale_delta : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, VolumeMorphInfo { bone_name : "RIGHT_PEC" + .to_owned(), has_position : true, has_scale : true, + position_delta : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.026_f32, z : - 0.0_f32 }, scale_delta : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } } + ], + ), + wearable: Some("physics".to_owned()), + }, + ); + params + .insert( + 1202, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: -1.0_f32, + name: "Belly_Physics_Legs_UpDown_Driven".to_owned(), + param_id: 1202, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("physics".to_owned()), + }, + ); + params + .insert( + 1203, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: -1.0_f32, + name: "Belly_Physics_Skirt_UpDown_Driven".to_owned(), + param_id: 1203, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("physics".to_owned()), + }, + ); + params + .insert( + 1204, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: -1.0_f32, + name: "Belly_Physics_Torso_UpDown_Driven".to_owned(), + param_id: 1204, + skeletal_distortions: None, + volume_morphs: Some( + vec![ + VolumeMorphInfo { bone_name : "BELLY".to_owned(), + has_position : true, has_scale : true, position_delta : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.05_f32 }, scale_delta : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 } } + ], + ), + wearable: Some("physics".to_owned()), + }, + ); + params + .insert( + 1205, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: -1.0_f32, + name: "Butt_Physics_UpDown_Driven".to_owned(), + param_id: 1205, + skeletal_distortions: None, + volume_morphs: Some( + vec![ + VolumeMorphInfo { bone_name : "BUTT".to_owned(), + has_position : true, has_scale : false, position_delta : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.05_f32 }, scale_delta : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 } } + ], + ), + wearable: Some("physics".to_owned()), + }, + ); + params + .insert( + 1206, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: -1.0_f32, + name: "Butt_Physics_LeftRight_Driven".to_owned(), + param_id: 1206, + skeletal_distortions: None, + volume_morphs: Some( + vec![ + VolumeMorphInfo { bone_name : "BUTT".to_owned(), + has_position : true, has_scale : false, position_delta : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.05_f32, z + : 0.0_f32 }, scale_delta : libremetaverse_types::Vector3 { x + : 0.0_f32, y : 0.0_f32, z : 0.0_f32 } } + ], + ), + wearable: Some("physics".to_owned()), + }, + ); + params + .insert( + 1207, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 2.0_f32, + min_value: -2.0_f32, + name: "Breast_Physics_LeftRight_Driven".to_owned(), + param_id: 1207, + skeletal_distortions: None, + volume_morphs: Some( + vec![ + VolumeMorphInfo { bone_name : "LEFT_PEC".to_owned(), + has_position : true, has_scale : true, position_delta : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.03_f32, z + : 0.0_f32 }, scale_delta : libremetaverse_types::Vector3 { x + : 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, VolumeMorphInfo { + bone_name : "RIGHT_PEC".to_owned(), has_position : true, + has_scale : true, position_delta : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.03_f32, z + : 0.0_f32 }, scale_delta : libremetaverse_types::Vector3 { x + : 0.0_f32, y : 0.0_f32, z : 0.0_f32 } } + ], + ), + wearable: Some("physics".to_owned()), + }, + ); + params + .insert( + 1208, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(255_u8) / 255.0, g : f32::from(0_u8) / + 255.0, b : f32::from(0_u8) / 255.0, a : f32::from(255_u8) / + 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "tattoo_skirt_red".to_owned(), + param_id: 1208, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("universal".to_owned()), + }, + ); + params + .insert( + 1209, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(0_u8) / 255.0, g : f32::from(255_u8) / + 255.0, b : f32::from(0_u8) / 255.0, a : f32::from(255_u8) / + 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "tattoo_skirt_green".to_owned(), + param_id: 1209, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("universal".to_owned()), + }, + ); + params + .insert( + 1210, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(0_u8) / 255.0, g : f32::from(0_u8) / 255.0, + b : f32::from(255_u8) / 255.0, a : f32::from(255_u8) / 255.0 + } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "tattoo_skirt_blue".to_owned(), + param_id: 1210, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("universal".to_owned()), + }, + ); + params + .insert( + 1211, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(255_u8) / 255.0, g : f32::from(0_u8) / + 255.0, b : f32::from(0_u8) / 255.0, a : f32::from(255_u8) / + 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "tattoo_hair_red".to_owned(), + param_id: 1211, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("universal".to_owned()), + }, + ); + params + .insert( + 1212, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(0_u8) / 255.0, g : f32::from(255_u8) / + 255.0, b : f32::from(0_u8) / 255.0, a : f32::from(255_u8) / + 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "tattoo_hair_green".to_owned(), + param_id: 1212, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("universal".to_owned()), + }, + ); + params + .insert( + 1213, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(0_u8) / 255.0, g : f32::from(0_u8) / 255.0, + b : f32::from(255_u8) / 255.0, a : f32::from(255_u8) / 255.0 + } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "tattoo_hair_blue".to_owned(), + param_id: 1213, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("universal".to_owned()), + }, + ); + params + .insert( + 1214, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(255_u8) / 255.0, g : f32::from(0_u8) / + 255.0, b : f32::from(0_u8) / 255.0, a : f32::from(255_u8) / + 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "tattoo_leftarm_red".to_owned(), + param_id: 1214, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("universal".to_owned()), + }, + ); + params + .insert( + 1215, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(0_u8) / 255.0, g : f32::from(255_u8) / + 255.0, b : f32::from(0_u8) / 255.0, a : f32::from(255_u8) / + 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "tattoo_leftarm_green".to_owned(), + param_id: 1215, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("universal".to_owned()), + }, + ); + params + .insert( + 1216, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(0_u8) / 255.0, g : f32::from(0_u8) / 255.0, + b : f32::from(255_u8) / 255.0, a : f32::from(255_u8) / 255.0 + } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "tattoo_leftarm_blue".to_owned(), + param_id: 1216, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("universal".to_owned()), + }, + ); + params + .insert( + 1217, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(255_u8) / 255.0, g : f32::from(0_u8) / + 255.0, b : f32::from(0_u8) / 255.0, a : f32::from(255_u8) / + 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "tattoo_leftleg_red".to_owned(), + param_id: 1217, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("universal".to_owned()), + }, + ); + params + .insert( + 1218, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(0_u8) / 255.0, g : f32::from(255_u8) / + 255.0, b : f32::from(0_u8) / 255.0, a : f32::from(255_u8) / + 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "tattoo_leftleg_green".to_owned(), + param_id: 1218, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("universal".to_owned()), + }, + ); + params + .insert( + 1219, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(0_u8) / 255.0, g : f32::from(0_u8) / 255.0, + b : f32::from(255_u8) / 255.0, a : f32::from(255_u8) / 255.0 + } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "tattoo_leftleg_blue".to_owned(), + param_id: 1219, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("universal".to_owned()), + }, + ); + params + .insert( + 1220, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(255_u8) / 255.0, g : f32::from(0_u8) / + 255.0, b : f32::from(0_u8) / 255.0, a : f32::from(255_u8) / + 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "tattoo_aux1_red".to_owned(), + param_id: 1220, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("universal".to_owned()), + }, + ); + params + .insert( + 1221, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(0_u8) / 255.0, g : f32::from(255_u8) / + 255.0, b : f32::from(0_u8) / 255.0, a : f32::from(255_u8) / + 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "tattoo_aux1_green".to_owned(), + param_id: 1221, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("universal".to_owned()), + }, + ); + params + .insert( + 1222, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(0_u8) / 255.0, g : f32::from(0_u8) / 255.0, + b : f32::from(255_u8) / 255.0, a : f32::from(255_u8) / 255.0 + } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "tattoo_aux1_blue".to_owned(), + param_id: 1222, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("universal".to_owned()), + }, + ); + params + .insert( + 1223, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(255_u8) / 255.0, g : f32::from(0_u8) / + 255.0, b : f32::from(0_u8) / 255.0, a : f32::from(255_u8) / + 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "tattoo_aux2_red".to_owned(), + param_id: 1223, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("universal".to_owned()), + }, + ); + params + .insert( + 1224, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(0_u8) / 255.0, g : f32::from(255_u8) / + 255.0, b : f32::from(0_u8) / 255.0, a : f32::from(255_u8) / + 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "tattoo_aux2_green".to_owned(), + param_id: 1224, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("universal".to_owned()), + }, + ); + params + .insert( + 1225, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(0_u8) / 255.0, g : f32::from(0_u8) / 255.0, + b : f32::from(255_u8) / 255.0, a : f32::from(255_u8) / 255.0 + } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "tattoo_aux2_blue".to_owned(), + param_id: 1225, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("universal".to_owned()), + }, + ); + params + .insert( + 1226, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(255_u8) / 255.0, g : f32::from(0_u8) / + 255.0, b : f32::from(0_u8) / 255.0, a : f32::from(255_u8) / + 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "tattoo_aux3_red".to_owned(), + param_id: 1226, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("universal".to_owned()), + }, + ); + params + .insert( + 1227, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(0_u8) / 255.0, g : f32::from(255_u8) / + 255.0, b : f32::from(0_u8) / 255.0, a : f32::from(255_u8) / + 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "tattoo_aux3_green".to_owned(), + param_id: 1227, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("universal".to_owned()), + }, + ); + params + .insert( + 1228, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(0_u8) / 255.0, g : f32::from(0_u8) / 255.0, + b : f32::from(255_u8) / 255.0, a : f32::from(255_u8) / 255.0 + } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "tattoo_aux3_blue".to_owned(), + param_id: 1228, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("universal".to_owned()), + }, + ); + params + .insert( + 1229, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(255_u8) / 255.0, g : f32::from(0_u8) / + 255.0, b : f32::from(0_u8) / 255.0, a : f32::from(255_u8) / + 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "tattoo_head_universal_red".to_owned(), + param_id: 1229, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("universal".to_owned()), + }, + ); + params + .insert( + 1230, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(0_u8) / 255.0, g : f32::from(255_u8) / + 255.0, b : f32::from(0_u8) / 255.0, a : f32::from(255_u8) / + 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "tattoo_head_universal_green".to_owned(), + param_id: 1230, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("universal".to_owned()), + }, + ); + params + .insert( + 1231, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(0_u8) / 255.0, g : f32::from(0_u8) / 255.0, + b : f32::from(255_u8) / 255.0, a : f32::from(255_u8) / 255.0 + } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "tattoo_head_universal_blue".to_owned(), + param_id: 1231, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("universal".to_owned()), + }, + ); + params + .insert( + 1232, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(255_u8) / 255.0, g : f32::from(0_u8) / + 255.0, b : f32::from(0_u8) / 255.0, a : f32::from(255_u8) / + 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "tattoo_upper_universal_red".to_owned(), + param_id: 1232, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("universal".to_owned()), + }, + ); + params + .insert( + 1233, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(0_u8) / 255.0, g : f32::from(255_u8) / + 255.0, b : f32::from(0_u8) / 255.0, a : f32::from(255_u8) / + 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "tattoo_upper_universal_green".to_owned(), + param_id: 1233, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("universal".to_owned()), + }, + ); + params + .insert( + 1234, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(0_u8) / 255.0, g : f32::from(0_u8) / 255.0, + b : f32::from(255_u8) / 255.0, a : f32::from(255_u8) / 255.0 + } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "tattoo_upper_universal_blue".to_owned(), + param_id: 1234, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("universal".to_owned()), + }, + ); + params + .insert( + 1235, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(255_u8) / 255.0, g : f32::from(0_u8) / + 255.0, b : f32::from(0_u8) / 255.0, a : f32::from(255_u8) / + 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "tattoo_lower_universal_red".to_owned(), + param_id: 1235, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("universal".to_owned()), + }, + ); + params + .insert( + 1236, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(0_u8) / 255.0, g : f32::from(255_u8) / + 255.0, b : f32::from(0_u8) / 255.0, a : f32::from(255_u8) / + 255.0 } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "tattoo_lower_universal_green".to_owned(), + param_id: 1236, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("universal".to_owned()), + }, + ); + params + .insert( + 1237, + VisualParam { + alpha_params: None, + color_params: Some( + Some(VisualColorParam { + colors: vec![ + libremetaverse_types::Color4 { r : f32::from(0_u8) / 255.0, + g : f32::from(0_u8) / 255.0, b : f32::from(0_u8) / 255.0, a + : f32::from(255_u8) / 255.0 }, libremetaverse_types::Color4 + { r : f32::from(0_u8) / 255.0, g : f32::from(0_u8) / 255.0, + b : f32::from(255_u8) / 255.0, a : f32::from(255_u8) / 255.0 + } + ], + operation: crate::VisualColorOperation::Add, + }), + ), + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "tattoo_lower_universal_blue".to_owned(), + param_id: 1237, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("universal".to_owned()), + }, + ); + params + .insert( + 1238, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 1.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.0_f32, min2 : 1.0_f32, param_id : 1229 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.0_f32, min2 : 1.0_f32, param_id : 1232 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.0_f32, min2 : 1.0_f32, param_id : 1235 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.0_f32, min2 : 1.0_f32, param_id : 1208 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.0_f32, min2 : 1.0_f32, param_id : 1211 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.0_f32, min2 : 1.0_f32, param_id : 924 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.0_f32, min2 : 1.0_f32, param_id : 1214 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.0_f32, min2 : 1.0_f32, param_id : 1217 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.0_f32, min2 : 1.0_f32, param_id : 1220 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.0_f32, min2 : 1.0_f32, param_id : 1223 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.0_f32, min2 : 1.0_f32, param_id : 1226 } + ], + ), + drivers: Some( + vec![ + 1229, 1232, 1235, 1208, 1211, 924, 1214, 1217, 1220, 1223, + 1226 + ], + ), + group: 2, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "tattoo_universal_red".to_owned(), + param_id: 1238, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("universal".to_owned()), + }, + ); + params + .insert( + 1239, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 1.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.0_f32, min2 : 1.0_f32, param_id : 1230 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.0_f32, min2 : 1.0_f32, param_id : 1233 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.0_f32, min2 : 1.0_f32, param_id : 1236 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.0_f32, min2 : 1.0_f32, param_id : 1209 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.0_f32, min2 : 1.0_f32, param_id : 1212 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.0_f32, min2 : 1.0_f32, param_id : 925 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.0_f32, min2 : 1.0_f32, param_id : 1215 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.0_f32, min2 : 1.0_f32, param_id : 1218 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.0_f32, min2 : 1.0_f32, param_id : 1221 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.0_f32, min2 : 1.0_f32, param_id : 1224 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.0_f32, min2 : 1.0_f32, param_id : 1227 } + ], + ), + drivers: Some( + vec![ + 1230, 1233, 1236, 1209, 1212, 925, 1215, 1218, 1221, 1224, + 1227 + ], + ), + group: 2, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "tattoo_universal_green".to_owned(), + param_id: 1239, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("universal".to_owned()), + }, + ); + params + .insert( + 1240, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 1.0_f32, + driven_params: Some( + vec![ + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.0_f32, min2 : 1.0_f32, param_id : 1231 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.0_f32, min2 : 1.0_f32, param_id : 1234 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.0_f32, min2 : 1.0_f32, param_id : 1237 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.0_f32, min2 : 1.0_f32, param_id : 1210 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.0_f32, min2 : 1.0_f32, param_id : 1213 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.0_f32, min2 : 1.0_f32, param_id : 926 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.0_f32, min2 : 1.0_f32, param_id : 1216 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.0_f32, min2 : 1.0_f32, param_id : 1219 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.0_f32, min2 : 1.0_f32, param_id : 1222 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.0_f32, min2 : 1.0_f32, param_id : 1225 }, + DrivenParamInfo { has_range : true, max1 : 1.0_f32, max2 : + 1.0_f32, min1 : 0.0_f32, min2 : 1.0_f32, param_id : 1228 } + ], + ), + drivers: Some( + vec![ + 1231, 1234, 1237, 1210, 1213, 926, 1216, 1219, 1222, 1225, + 1228 + ], + ), + group: 2, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "tattoo_universal_blue".to_owned(), + param_id: 1240, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("universal".to_owned()), + }, + ); + params + .insert( + 10000, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.1_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "Breast Physics Mass".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.1_f32, + name: "Breast_Physics_Mass".to_owned(), + param_id: 10000, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("physics".to_owned()), + }, + ); + params + .insert( + 10001, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "Breast Physics Gravity".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 30.0_f32, + min_value: 0.0_f32, + name: "Breast_Physics_Gravity".to_owned(), + param_id: 10001, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("physics".to_owned()), + }, + ); + params + .insert( + 10002, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "Breast Physics Drag".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 10.0_f32, + min_value: 0.0_f32, + name: "Breast_Physics_Drag".to_owned(), + param_id: 10002, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("physics".to_owned()), + }, + ); + params + .insert( + 10003, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "Breast Physics UpDown Max Effect".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 3.0_f32, + min_value: 0.0_f32, + name: "Breast_Physics_UpDown_Max_Effect".to_owned(), + param_id: 10003, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("physics".to_owned()), + }, + ); + params + .insert( + 10004, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 10.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "Breast Physics UpDown Spring".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 100.0_f32, + min_value: 0.0_f32, + name: "Breast_Physics_UpDown_Spring".to_owned(), + param_id: 10004, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("physics".to_owned()), + }, + ); + params + .insert( + 10005, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 10.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "Breast Physics UpDown Gain".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 100.0_f32, + min_value: 1.0_f32, + name: "Breast_Physics_UpDown_Gain".to_owned(), + param_id: 10005, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("physics".to_owned()), + }, + ); + params + .insert( + 10006, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.2_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "Breast Physics UpDown Damping".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Breast_Physics_UpDown_Damping".to_owned(), + param_id: 10006, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("physics".to_owned()), + }, + ); + params + .insert( + 10007, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "Breast Physics InOut Max Effect".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 3.0_f32, + min_value: 0.0_f32, + name: "Breast_Physics_InOut_Max_Effect".to_owned(), + param_id: 10007, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("physics".to_owned()), + }, + ); + params + .insert( + 10008, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 10.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "Breast Physics InOut Spring".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 100.0_f32, + min_value: 0.0_f32, + name: "Breast_Physics_InOut_Spring".to_owned(), + param_id: 10008, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("physics".to_owned()), + }, + ); + params + .insert( + 10009, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 10.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "Breast Physics InOut Gain".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 100.0_f32, + min_value: 1.0_f32, + name: "Breast_Physics_InOut_Gain".to_owned(), + param_id: 10009, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("physics".to_owned()), + }, + ); + params + .insert( + 10010, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.2_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "Breast Physics InOut Damping".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Breast_Physics_InOut_Damping".to_owned(), + param_id: 10010, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("physics".to_owned()), + }, + ); + params + .insert( + 10011, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.1_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "Belly Physics Mass".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.1_f32, + name: "Belly_Physics_Mass".to_owned(), + param_id: 10011, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("physics".to_owned()), + }, + ); + params + .insert( + 10012, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "Belly Physics Gravity".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 30.0_f32, + min_value: 0.0_f32, + name: "Belly_Physics_Gravity".to_owned(), + param_id: 10012, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("physics".to_owned()), + }, + ); + params + .insert( + 10013, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "Belly Physics Drag".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 10.0_f32, + min_value: 0.0_f32, + name: "Belly_Physics_Drag".to_owned(), + param_id: 10013, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("physics".to_owned()), + }, + ); + params + .insert( + 10014, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "Belly Physics UpDown Max Effect".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 3.0_f32, + min_value: 0.0_f32, + name: "Belly_Physics_UpDown_Max_Effect".to_owned(), + param_id: 10014, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("physics".to_owned()), + }, + ); + params + .insert( + 10015, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 10.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "Belly Physics UpDown Spring".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 100.0_f32, + min_value: 0.0_f32, + name: "Belly_Physics_UpDown_Spring".to_owned(), + param_id: 10015, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("physics".to_owned()), + }, + ); + params + .insert( + 10016, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 10.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "Belly Physics UpDown Gain".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 100.0_f32, + min_value: 1.0_f32, + name: "Belly_Physics_UpDown_Gain".to_owned(), + param_id: 10016, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("physics".to_owned()), + }, + ); + params + .insert( + 10017, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.2_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "Belly Physics UpDown Damping".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Belly_Physics_UpDown_Damping".to_owned(), + param_id: 10017, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("physics".to_owned()), + }, + ); + params + .insert( + 10018, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.1_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "Butt Physics Mass".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.1_f32, + name: "Butt_Physics_Mass".to_owned(), + param_id: 10018, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("physics".to_owned()), + }, + ); + params + .insert( + 10019, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "Butt Physics Gravity".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 30.0_f32, + min_value: 0.0_f32, + name: "Butt_Physics_Gravity".to_owned(), + param_id: 10019, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("physics".to_owned()), + }, + ); + params + .insert( + 10020, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 1.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "Butt Physics Drag".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 10.0_f32, + min_value: 0.0_f32, + name: "Butt_Physics_Drag".to_owned(), + param_id: 10020, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("physics".to_owned()), + }, + ); + params + .insert( + 10021, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "Butt Physics UpDown Max Effect".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 3.0_f32, + min_value: 0.0_f32, + name: "Butt_Physics_UpDown_Max_Effect".to_owned(), + param_id: 10021, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("physics".to_owned()), + }, + ); + params + .insert( + 10022, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 10.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "Butt Physics UpDown Spring".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 100.0_f32, + min_value: 0.0_f32, + name: "Butt_Physics_UpDown_Spring".to_owned(), + param_id: 10022, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("physics".to_owned()), + }, + ); + params + .insert( + 10023, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 10.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "Butt Physics UpDown Gain".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 100.0_f32, + min_value: 1.0_f32, + name: "Butt_Physics_UpDown_Gain".to_owned(), + param_id: 10023, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("physics".to_owned()), + }, + ); + params + .insert( + 10024, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.2_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "Butt Physics UpDown Damping".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Butt_Physics_UpDown_Damping".to_owned(), + param_id: 10024, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("physics".to_owned()), + }, + ); + params + .insert( + 10025, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "Butt Physics LeftRight Max Effect".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 3.0_f32, + min_value: 0.0_f32, + name: "Butt_Physics_LeftRight_Max_Effect".to_owned(), + param_id: 10025, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("physics".to_owned()), + }, + ); + params + .insert( + 10026, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 10.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "Butt Physics LeftRight Spring".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 100.0_f32, + min_value: 0.0_f32, + name: "Butt_Physics_LeftRight_Spring".to_owned(), + param_id: 10026, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("physics".to_owned()), + }, + ); + params + .insert( + 10027, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 10.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "Butt Physics LeftRight Gain".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 100.0_f32, + min_value: 1.0_f32, + name: "Butt_Physics_LeftRight_Gain".to_owned(), + param_id: 10027, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("physics".to_owned()), + }, + ); + params + .insert( + 10028, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.2_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "Butt Physics LeftRight Damping".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Butt_Physics_LeftRight_Damping".to_owned(), + param_id: 10028, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("physics".to_owned()), + }, + ); + params + .insert( + 10029, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "Breast Physics LeftRight Max Effect".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 3.0_f32, + min_value: 0.0_f32, + name: "Breast_Physics_LeftRight_Max_Effect".to_owned(), + param_id: 10029, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("physics".to_owned()), + }, + ); + params + .insert( + 10030, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 10.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "Breast Physics LeftRight Spring".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 100.0_f32, + min_value: 0.0_f32, + name: "Breast_Physics_LeftRight_Spring".to_owned(), + param_id: 10030, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("physics".to_owned()), + }, + ); + params + .insert( + 10031, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 10.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "Breast Physics LeftRight Gain".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 100.0_f32, + min_value: 1.0_f32, + name: "Breast_Physics_LeftRight_Gain".to_owned(), + param_id: 10031, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("physics".to_owned()), + }, + ); + params + .insert( + 10032, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.2_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "Breast Physics LeftRight Damping".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Breast_Physics_LeftRight_Damping".to_owned(), + param_id: 10032, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("physics".to_owned()), + }, + ); + params + .insert( + 11000, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "AppearanceMessage Version".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 255.0_f32, + min_value: 0.0_f32, + name: "AppearanceMessage_Version".to_owned(), + param_id: 11000, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 11001, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 0, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "Higher".to_owned(), + label_min: "Lower".to_owned(), + max_value: 2.0_f32, + min_value: -2.0_f32, + name: "Hover".to_owned(), + param_id: 11001, + skeletal_distortions: None, + volume_morphs: None, + wearable: Some("shape".to_owned()), + }, + ); + params + .insert( + 20001, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 2.0_f32, + min_value: -0.3_f32, + name: "Big_Brow".to_owned(), + param_id: 20001, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 20002, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 2.5_f32, + min_value: -0.8_f32, + name: "Nose_Big_Out".to_owned(), + param_id: 20002, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 20004, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: -0.5_f32, + name: "Broad_Nostrils".to_owned(), + param_id: 20004, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 20006, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: -0.3_f32, + name: "Bulbous_Nose_Tip".to_owned(), + param_id: 20006, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 20007, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 0.5_f32, + min_value: -0.5_f32, + name: "Weak_Chin".to_owned(), + param_id: 20007, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 20008, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.5_f32, + min_value: -0.5_f32, + name: "Double_Chin".to_owned(), + param_id: 20008, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 20010, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 3.0_f32, + min_value: -1.5_f32, + name: "Sunken_Cheeks".to_owned(), + param_id: 20010, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 20011, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.5_f32, + min_value: -0.5_f32, + name: "Noble_Nose_Bridge".to_owned(), + param_id: 20011, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 20014, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: -0.5_f32, + name: "High_Cheek_Bones".to_owned(), + param_id: 20014, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 20015, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.5_f32, + min_value: -0.5_f32, + name: "Ears_Out".to_owned(), + param_id: 20015, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 20017, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: -0.5_f32, + name: "Square_Jaw".to_owned(), + param_id: 20017, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 20018, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 2.5_f32, + min_value: -1.5_f32, + name: "Puffy_Upper_Cheeks".to_owned(), + param_id: 20018, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 20019, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: -1.5_f32, + name: "Upturned_Nose_Tip".to_owned(), + param_id: 20019, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 20020, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.5_f32, + min_value: -0.5_f32, + name: "Bulbous_Nose".to_owned(), + param_id: 20020, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 20021, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.3_f32, + min_value: -0.2_f32, + name: "Upper_Eyelid_Fold".to_owned(), + param_id: 20021, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 20023, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.5_f32, + min_value: -0.5_f32, + name: "Baggy_Eyes".to_owned(), + param_id: 20023, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 20024, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 2.0_f32, + min_value: -1.5_f32, + name: "Wide_Eyes".to_owned(), + param_id: 20024, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 20025, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.5_f32, + min_value: -0.8_f32, + name: "Wide_Lip_Cleft".to_owned(), + param_id: 20025, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 20027, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.2_f32, + min_value: -1.3_f32, + name: "Wide_Nose_Bridge".to_owned(), + param_id: 20027, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 20035, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 2.0_f32, + min_value: -1.0_f32, + name: "Big_Ears".to_owned(), + param_id: 20035, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 20185, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: -1.0_f32, + name: "Deep_Chin".to_owned(), + param_id: 20185, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 20506, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 2.0_f32, + min_value: -2.0_f32, + name: "Mouth_Height".to_owned(), + param_id: 20506, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 20517, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: -0.5_f32, + name: "Wide_Nose".to_owned(), + param_id: 20517, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 20650, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.2_f32, + min_value: -1.3_f32, + name: "Eyelid_Corner_Up".to_owned(), + param_id: 20650, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 20653, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 2.0_f32, + min_value: -1.0_f32, + name: "Tall_Lips".to_owned(), + param_id: 20653, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 20656, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 2.0_f32, + min_value: -2.0_f32, + name: "Crooked_Nose".to_owned(), + param_id: 20656, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 20663, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 2.0_f32, + min_value: -2.0_f32, + name: "Shift_Mouth".to_owned(), + param_id: 20663, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 20665, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 2.0_f32, + min_value: -2.0_f32, + name: "Jaw_Jut".to_owned(), + param_id: 20665, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 20758, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.5_f32, + min_value: -1.5_f32, + name: "Lower_Bridge_Nose".to_owned(), + param_id: 20758, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 20759, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.5_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.5_f32, + min_value: -1.0_f32, + name: "Low_Septum_Nose".to_owned(), + param_id: 20759, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 20760, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 2.0_f32, + min_value: -1.2_f32, + name: "Jaw_Angle".to_owned(), + param_id: 20760, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 20764, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.2_f32, + min_value: -0.5_f32, + name: "Lip_Cleft_Deep".to_owned(), + param_id: 20764, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 20765, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 2.5_f32, + min_value: -0.3_f32, + name: "Puffy_Lower_Lids".to_owned(), + param_id: 20765, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 20796, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 3.0_f32, + min_value: -0.4_f32, + name: "Pointy_Ears".to_owned(), + param_id: 20796, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 20879, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 2.0_f32, + min_value: -0.5_f32, + name: "Male_Package".to_owned(), + param_id: 20879, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 20880, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.2_f32, + min_value: -1.3_f32, + name: "Eyelid_Inner_Corner_Up".to_owned(), + param_id: 20880, + skeletal_distortions: None, + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 30001, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 2.0_f32, + min_value: -0.3_f32, + name: "Big_Brow".to_owned(), + param_id: 30001, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mFaceForeheadCenter" + .to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : + 0.007_f32, y : 0.0_f32, z : 0.001_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyebrowInnerRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.004_f32, y : 0.0_f32, + z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.1_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyebrowInnerLeft".to_owned(), has_position_deformation + : true, position_deformation : libremetaverse_types::Vector3 + { x : 0.004_f32, y : 0.0_f32, z : 0.0_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.1_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceEyebrowCenterRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.004_f32, y : 0.0_f32, + z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.1_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyebrowCenterLeft".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.004_f32, y : 0.0_f32, + z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.1_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyebrowOuterRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.004_f32, y : 0.0_f32, + z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyebrowOuterLeft".to_owned(), has_position_deformation + : true, position_deformation : libremetaverse_types::Vector3 + { x : 0.004_f32, y : 0.0_f32, z : 0.0_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } } + ], + ), + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 30002, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 2.5_f32, + min_value: -0.8_f32, + name: "Nose_Big_Out".to_owned(), + param_id: 30002, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mFaceNoseCenter".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.5_f32, y : 0.3_f32, z + : 0.1_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceNoseLeft".to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.3_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceNoseRight".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.3_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceNoseBridge".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.006_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.1_f32, y : 0.1_f32, + z : 0.0_f32 } } + ], + ), + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 30004, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: -0.5_f32, + name: "Broad_Nostrils".to_owned(), + param_id: 30004, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mFaceNoseLeft".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.005_f32, + z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceNoseRight".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : - 0.005_f32, z : 0.0_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } } + ], + ), + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 30006, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.5_f32, + min_value: -1.0_f32, + name: "Bulbous_Nose_Tip".to_owned(), + param_id: 30006, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mFaceNoseCenter".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.1_f32, y : 0.1_f32, z + : 0.1_f32 } } + ], + ), + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 30007, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 0.5_f32, + min_value: -0.5_f32, + name: "Weak_Chin".to_owned(), + param_id: 30007, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mFaceChin".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : - 0.06_f32, y : 0.0_f32, + z : 0.01_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } } + ], + ), + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 30008, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.5_f32, + min_value: -0.5_f32, + name: "Double_Chin".to_owned(), + param_id: 30008, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mFaceJawShaper".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.125_f32, + z : 0.5_f32 } } + ], + ), + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 30010, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 3.0_f32, + min_value: -1.5_f32, + name: "Sunken_Cheeks".to_owned(), + param_id: 30010, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mFaceCheekLowerLeft" + .to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : - 0.12_f32, + z : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceCheekLowerRight".to_owned(), has_position_deformation + : true, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : - + 0.12_f32, z : 0.0_f32 } } + ], + ), + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 30011, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.5_f32, + min_value: -0.5_f32, + name: "Noble_Nose_Bridge".to_owned(), + param_id: 30011, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mFaceNoseBridge".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.009_f32, y : 0.0_f32, + z : - 0.006_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.15_f32, y : 0.01_f32, + z : 0.7_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceForeheadCenter".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.001_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, + z : 0.0_f32 } } + ], + ), + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 30014, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: -0.5_f32, + name: "High_Cheek_Bones".to_owned(), + param_id: 30014, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mFaceCheekUpperLeft" + .to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.02_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceCheekUpperRight".to_owned(), has_position_deformation + : true, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : 0.02_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } } + ], + ), + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 30015, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.5_f32, + min_value: -0.5_f32, + name: "Ears_Out".to_owned(), + param_id: 30015, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mFaceEar1Left".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : - 0.0_f32, + z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEar1Right".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } } + ], + ), + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 30016, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 3.0_f32, + min_value: -0.5_f32, + name: "Pointy_Eyebrows".to_owned(), + param_id: 30016, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mFaceEyebrowOuterRight" + .to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyebrowCenterRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : - + 0.001_f32, z : 0.0035_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyebrowInnerRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : - 0.002_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyebrowOuterLeft".to_owned(), has_position_deformation + : true, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, + z : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyebrowCenterLeft".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.001_f32, + z : 0.0035_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyebrowInnerLeft".to_owned(), has_position_deformation + : true, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : - 0.002_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } } + ], + ), + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 30017, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: -0.5_f32, + name: "Square_Jaw".to_owned(), + param_id: 30017, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mFaceChin".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.5_f32, z + : 0.0_f32 } } + ], + ), + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 30018, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 2.5_f32, + min_value: -1.5_f32, + name: "Puffy_Upper_Cheeks".to_owned(), + param_id: 30018, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mFaceCheekUpperLeft" + .to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : + 0.002_f32, y : 0.0_f32, z : 0.0015_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.15_f32, y : 0.1_f32, + z : 0.1_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceCheekUpperRight".to_owned(), has_position_deformation + : true, position_deformation : libremetaverse_types::Vector3 + { x : 0.002_f32, y : 0.0_f32, z : 0.0015_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.15_f32, y : 0.1_f32, z : 0.1_f32 } } + ], + ), + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 30019, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: -1.5_f32, + name: "Upturned_Nose_Tip".to_owned(), + param_id: 30019, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mFaceNoseBase".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.001_f32, y : 0.0_f32, + z : - 0.0015_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceNoseCenter".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : - 0.002_f32, y : 0.0_f32, z : 0.004_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceNoseRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.001_f32, y : 0.0_f32, + z : - 0.002_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceNoseLeft".to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : + 0.001_f32, y : 0.0_f32, z : - 0.002_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, + z : 0.0_f32 } } + ], + ), + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 30020, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.5_f32, + min_value: -0.5_f32, + name: "Bulbous_Nose".to_owned(), + param_id: 30020, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mFaceNoseCenter".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.2_f32, y : 0.4_f32, z + : 0.2_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceNoseLeft".to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0015_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.3_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceNoseRight".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : - 0.0015_f32, z : 0.0_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.3_f32, z : 0.0_f32 } } + ], + ), + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 30021, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.3_f32, + min_value: -0.2_f32, + name: "Upper_Eyelid_Fold".to_owned(), + param_id: 30021, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mFaceEyeLidUpperLeft" + .to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : - 0.006_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyeLidUpperRight".to_owned(), has_position_deformation + : true, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : - 0.006_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } } + ], + ), + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 30023, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.5_f32, + min_value: -0.5_f32, + name: "Baggy_Eyes".to_owned(), + param_id: 30023, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mFaceEyeLidLowerLeft" + .to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : - 0.001_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.5_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyeLidLowerRight".to_owned(), has_position_deformation + : true, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : - 0.001_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.5_f32 } } + ], + ), + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 30024, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 2.0_f32, + min_value: -1.5_f32, + name: "Wide_Eyes".to_owned(), + param_id: 30024, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mFaceEyeLidLowerRight" + .to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.1_f32, z + : 0.2_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyeLidLowerLeft".to_owned(), has_position_deformation + : true, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.1_f32, + z : 0.2_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyeLidUpperRight".to_owned(), has_position_deformation + : true, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.1_f32, + z : 0.2_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyeLidUpperLeft".to_owned(), has_position_deformation + : true, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.1_f32, + z : 0.2_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyeAltLeft".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyeAltRight".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } } + ], + ), + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 30025, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.5_f32, + min_value: -0.8_f32, + name: "Wide_Lip_Cleft".to_owned(), + param_id: 30025, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mFaceLipUpperLeft" + .to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.1_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceLipUpperRight".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.1_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceLipCornerRight".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.001_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, + z : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceLipCornerLeft".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : - 0.001_f32, z : 0.0_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } } + ], + ), + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 30027, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.2_f32, + min_value: -1.3_f32, + name: "Wide_Nose_Bridge".to_owned(), + param_id: 30027, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mFaceNoseBridge".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.4_f32, z + : 0.0_f32 } } + ], + ), + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 30031, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.5_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 2.0_f32, + min_value: 0.0_f32, + name: "Arced_Eyebrows".to_owned(), + param_id: 30031, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mFaceEyebrowOuterRight" + .to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyebrowCenterRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.005_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyebrowInnerRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.001_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyebrowOuterLeft".to_owned(), has_position_deformation + : true, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, + z : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyebrowCenterLeft".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.005_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyebrowInnerLeft".to_owned(), has_position_deformation + : true, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : 0.001_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } } + ], + ), + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 30035, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 2.0_f32, + min_value: -1.0_f32, + name: "Big_Ears".to_owned(), + param_id: 30035, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mFaceEar1Left".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : - + 0.002_f32, z : 0.001_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.55_f32, y : 0.55_f32, + z : 0.55_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEar1Right".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.002_f32, z : 0.001_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.55_f32, y : 0.55_f32, z : 0.55_f32 } } + ], + ), + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 30119, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.5_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Eyebrow Size".to_owned(), + param_id: 30119, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mFaceEyebrowOuterRight" + .to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.5_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyebrowCenterRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.5_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyebrowInnerRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.5_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyebrowOuterLeft".to_owned(), has_position_deformation + : true, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, + z : 0.5_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyebrowCenterLeft".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.5_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyebrowInnerLeft".to_owned(), has_position_deformation + : true, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, + z : 0.5_f32 } } + ], + ), + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 30155, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.3_f32, + min_value: -0.9_f32, + name: "Lip Width".to_owned(), + param_id: 30155, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mFaceLipCornerLeft" + .to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.005_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceLipUpperLeft".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.003_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, + z : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceLipUpperRight".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : - 0.003_f32, z : 0.0_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceLipLowerLeft".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.003_f32, + z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceLipLowerRight".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : - 0.003_f32, z : 0.0_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceLipCornerRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : - + 0.005_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } } + ], + ), + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 30185, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: -1.0_f32, + name: "Deep_Chin".to_owned(), + param_id: 30185, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mFaceChin".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : - 0.025_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } } + ], + ), + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 30193, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: -1.0_f32, + name: "Square_Head".to_owned(), + param_id: 30193, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mFaceChin".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : - 0.2_f32, + z : 0.0_f32 } }, SkeletalBoneInfo { bone_name : "mFaceRoot" + .to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceCheekLowerRight".to_owned(), has_position_deformation + : true, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : - + 0.2_f32, z : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceCheekLowerLeft".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : - 0.2_f32, + z : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceForeheadRight".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.01_f32, z : - 0.01_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : - 1.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceForeheadLeft".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : - 0.01_f32, + z : - 0.01_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : - 1.0_f32, + z : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceJawShaper".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : - 0.3_f32, + z : 0.0_f32 } } + ], + ), + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 30505, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 0.7_f32, + min_value: 0.0_f32, + name: "Lip_Thickness".to_owned(), + param_id: 30505, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mFaceLipCornerLeft" + .to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : - + 0.01_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.2_f32, y : 0.0_f32, z + : - 0.6_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceLipUpperLeft".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : - 0.012_f32, y : 0.0_f32, z : - 0.005_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.2_f32, y : 0.0_f32, z : - 0.6_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceLipUpperCenter".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : - 0.015_f32, y : + 0.0_f32, z : - 0.005_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.2_f32, y : 0.0_f32, z + : - 0.6_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceLipUpperRight".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : - 0.012_f32, y : 0.0_f32, z : - 0.005_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.2_f32, y : 0.0_f32, z : - 0.6_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceLipCornerRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : - 0.01_f32, y : 0.0_f32, + z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.2_f32, y : 0.0_f32, z + : - 0.6_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceLipLowerLeft".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : - 0.01_f32, y : 0.0_f32, z : 0.008_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.2_f32, y : 0.0_f32, z : - 0.6_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceLipLowerCenter".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : - 0.01_f32, y : 0.0_f32, + z : 0.008_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.2_f32, y : 0.0_f32, z + : - 0.6_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceLipLowerRight".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : - 0.01_f32, y : 0.0_f32, z : 0.008_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.2_f32, y : 0.0_f32, z : - 0.6_f32 } } + ], + ), + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 30506, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 2.0_f32, + min_value: -2.0_f32, + name: "Mouth_Height".to_owned(), + param_id: 30506, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mFaceTeethUpper".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : - 0.006_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceTeethLower".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : - 0.006_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceNoseBase".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : - 0.001_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } } + ], + ), + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 30517, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: -0.5_f32, + name: "Wide_Nose".to_owned(), + param_id: 30517, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mFaceNoseCenter".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.1_f32, y : 0.85_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceNoseLeft".to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : + 0.001_f32, y : 0.013_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceNoseRight".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.001_f32, y : - 0.013_f32, z : 0.0_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } } + ], + ), + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 30646, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: -1.3_f32, + name: "Egg_Head".to_owned(), + param_id: 30646, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mFaceRoot".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : - 0.005_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : - 0.07_f32, + z : 0.07_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceForeheadLeft".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : - 0.01_f32, y : 0.0_f32, z : - 0.01_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.2_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceForeheadCenter".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : - 0.001_f32, y : + 0.0_f32, z : 0.001_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceForeheadRight".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : - 0.01_f32, y : 0.0_f32, z : - 0.01_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.2_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceChin".to_owned(), has_position_deformation + : true, position_deformation : libremetaverse_types::Vector3 + { x : 0.015_f32, y : 0.0_f32, z : 0.005_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceEyeAltRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : - + 0.0033_f32, z : 0.0025_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyeAltLeft".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0033_f32, z : 0.0025_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceEyeLidLowerRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : - + 0.0033_f32, z : 0.0025_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyeLidUpperRight".to_owned(), has_position_deformation + : true, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : - 0.0033_f32, z : 0.002_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceEyecornerInnerRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : - + 0.0017_f32, z : 0.0025_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyebrowOuterRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : - + 0.004_f32, z : 0.0014_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyebrowCenterRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : - + 0.00377_f32, z : 0.00061_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyebrowInnerRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : - + 0.00225_f32, z : 0.001_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyeLidLowerLeft".to_owned(), has_position_deformation + : true, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0033_f32, z : 0.0025_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceEyeLidUpperLeft".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0033_f32, + z : 0.002_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyecornerInnerLeft".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0017_f32, + z : 0.0025_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyebrowOuterLeft".to_owned(), has_position_deformation + : true, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.004_f32, z : 0.0014_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceEyebrowCenterLeft".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : + 0.00377_f32, z : 0.00061_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyebrowInnerLeft".to_owned(), has_position_deformation + : true, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.00225_f32, z : 0.001_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceLipLowerRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceLipLowerCenter".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceLipLowerLeft".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceTeethUpper".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0075_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceTeethLower".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0061_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceTongueBase".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : - 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, + z : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceCheekLowerRight".to_owned(), has_position_deformation + : true, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : 0.0085_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceCheekLowerLeft".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0085_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceCheekUpperRight".to_owned(), has_position_deformation + : true, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : 0.005_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceCheekUpperLeft".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.005_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceNoseCenter".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.005_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, + z : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceNoseRight".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.005_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, + z : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceNoseLeft".to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.005_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceNoseBase".to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.006_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceJawShaper".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.2_f32, z + : 0.0_f32 } } + ], + ), + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 30647, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: -0.5_f32, + name: "Squash_Stretch_Head".to_owned(), + param_id: 30647, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mFaceRoot".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : - 0.1_f32, + z : 0.1_f32 } }, SkeletalBoneInfo { bone_name : "mFaceChin" + .to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : - 0.005_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : - 0.1_f32, + z : 0.5_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceForeheadCenter".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : - 0.006_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceEyebrowOuterRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : - + 0.0053_f32, z : - 0.0047_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyebrowCenterRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : - + 0.0045_f32, z : - 0.0053_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyebrowInnerRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : - + 0.00225_f32, z : - 0.0048_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyebrowOuterLeft".to_owned(), has_position_deformation + : true, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0053_f32, z : - 0.0047_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceEyebrowCenterLeft".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0045_f32, + z : - 0.0053_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyebrowInnerLeft".to_owned(), has_position_deformation + : true, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.00225_f32, z : - 0.0048_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceEyeAltRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : - + 0.0042_f32, z : - 0.0035_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyeAltLeft".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0042_f32, z : - 0.0035_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceEyeLidUpperRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : - + 0.0039_f32, z : - 0.0032_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyeLidUpperLeft".to_owned(), has_position_deformation + : true, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0039_f32, z : - 0.0032_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceEyeLidLowerRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : - + 0.0039_f32, z : - 0.0032_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyeLidLowerLeft".to_owned(), has_position_deformation + : true, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0039_f32, z : - 0.0032_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceEyecornerInnerRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : - + 0.00225_f32, z : - 0.0032_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyecornerInnerLeft".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : + 0.00225_f32, z : - 0.0032_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceNoseBridge".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : - 0.002_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceNoseRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : - + 0.002_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceNoseLeft".to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.002_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceNoseBase".to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.002_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceCheekUpperRight".to_owned(), has_position_deformation + : true, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : - 0.003_f32, z : 0.0_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceCheekUpperLeft".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.003_f32, + z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceCheekLowerRight".to_owned(), has_position_deformation + : true, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : - 0.003_f32, z : 0.0032_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceCheekLowerLeft".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.003_f32, + z : 0.0032_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceTeethUpper".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0032_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceTeethLower".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0016_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } } + ], + ), + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 30650, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.2_f32, + min_value: -1.3_f32, + name: "Eyelid_Corner_Up".to_owned(), + param_id: 30650, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mFaceEyebrowOuterLeft" + .to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.004_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyebrowOuterRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.004_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } } + ], + ), + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 30653, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 2.0_f32, + min_value: -1.0_f32, + name: "Tall_Lips".to_owned(), + param_id: 30653, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mFaceLipCornerLeft" + .to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : - + 0.008_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.2_f32, y : 0.0_f32, z + : 0.2_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceLipUpperLeft".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : - 0.009_f32, y : 0.0_f32, z : 0.0025_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.2_f32, y : 0.0_f32, z : 0.2_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceLipUpperCenter".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : - 0.009_f32, y : + 0.0_f32, z : 0.0025_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.2_f32, y : 0.0_f32, z + : 0.2_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceLipUpperRight".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : - 0.009_f32, y : 0.0_f32, z : 0.0025_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.2_f32, y : 0.0_f32, z : 0.2_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceLipCornerRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : - 0.008_f32, y : + 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.2_f32, y : 0.0_f32, z + : 0.2_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceLipLowerLeft".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : - 0.008_f32, y : 0.0_f32, z : - 0.0015_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.2_f32, y : 0.0_f32, z : 0.2_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceLipLowerCenter".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : - 0.008_f32, y : + 0.0_f32, z : - 0.0025_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.2_f32, y : 0.0_f32, z + : 0.2_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceLipLowerRight".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : - 0.008_f32, y : 0.0_f32, z : - 0.0015_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.2_f32, y : 0.0_f32, z : 0.2_f32 } } + ], + ), + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 30656, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 2.0_f32, + min_value: -2.0_f32, + name: "Crooked_Nose".to_owned(), + param_id: 30656, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mFaceNoseCenter".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.009_f32, + z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceNoseBase".to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.007_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceNoseLeft".to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.005_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceNoseRight".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.005_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, + z : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceLipCornerLeft".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.001_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, + z : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceLipUpperLeft".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.002_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, + z : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceLipUpperCenter".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.003_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, + z : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceLipUpperRight".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.002_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, + z : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceLipCornerRight".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.001_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, + z : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyebrowInnerRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0008_f32, + z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyebrowInnerLeft".to_owned(), has_position_deformation + : true, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0008_f32, z : 0.0_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceNoseBridge".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.004_f32, + z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceTeethUpper".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.003_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, + z : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyecornerInnerRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.001_f32, + z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyecornerInnerLeft".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.001_f32, + z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } } + ], + ), + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 30657, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.4_f32, + min_value: 0.0_f32, + name: "Smile_Mouth".to_owned(), + param_id: 30657, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mFaceLipCornerLeft" + .to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.005_f32, z : 0.002_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceLipCornerRight".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : - 0.005_f32, z : 0.002_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceLipUpperLeft".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.002_f32, + z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceLipUpperCenter".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : - 0.0005_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceLipUpperRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : - + 0.002_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceLipLowerLeft".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.001_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, + z : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceLipLowerCenter".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : - 0.001_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceLipLowerRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : - + 0.001_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } } + ], + ), + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 30658, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.4_f32, + min_value: 0.0_f32, + name: "Frown_Mouth".to_owned(), + param_id: 30658, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mFaceLipCornerLeft" + .to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : - 0.005_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceLipCornerRight".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : - 0.005_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceLipUpperLeft".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceLipUpperCenter".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceLipUpperRight".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceLipLowerLeft".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.001_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, + z : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceLipLowerCenter".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.002_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, + z : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceLipLowerRight".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.001_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, + z : 0.0_f32 } } + ], + ), + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 30665, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 2.0_f32, + min_value: -2.0_f32, + name: "Jaw_Jut".to_owned(), + param_id: 30665, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mFaceTeethLower".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.008_f32, y : 0.0_f32, + z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : "mFaceChin" + .to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : + 0.008_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } } + ], + ), + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 30689, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.1_f32, + min_value: -1.1_f32, + name: "EyeBone_Big_Eyes".to_owned(), + param_id: 30689, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mEyeLeft".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.248_f32, y : 0.25_f32, + z : 0.25_f32 } }, SkeletalBoneInfo { bone_name : "mEyeRight" + .to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.248_f32, y : 0.25_f32, + z : 0.25_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyeAltLeft".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.248_f32, y : 0.25_f32, + z : 0.25_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyeAltRight".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.248_f32, y : 0.25_f32, + z : 0.25_f32 } } + ], + ), + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 30757, + VisualParam { + alpha_params: None, + color_params: None, + default_value: -1.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 2.0_f32, + min_value: -4.0_f32, + name: "Lower_Eyebrows".to_owned(), + param_id: 30757, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mFaceEyebrowOuterRight" + .to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : - 0.001_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyebrowCenterRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : - 0.002_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyebrowInnerRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : - 0.001_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyebrowOuterLeft".to_owned(), has_position_deformation + : true, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : - 0.001_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceEyebrowCenterLeft".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : - 0.002_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyebrowInnerLeft".to_owned(), has_position_deformation + : true, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : - 0.001_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } } + ], + ), + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 30758, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.5_f32, + min_value: -1.5_f32, + name: "Lower_Bridge_Nose".to_owned(), + param_id: 30758, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mFaceNoseBridge".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0025_f32, y : 0.0_f32, + z : - 0.001_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.2_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceNoseCenter".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.004_f32, y : 0.0_f32, z : 0.001_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } } + ], + ), + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 30759, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.5_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.5_f32, + min_value: -1.0_f32, + name: "Low_Septum_Nose".to_owned(), + param_id: 30759, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mFaceNoseBase".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : - 0.004_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } } + ], + ), + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 30760, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 2.0_f32, + min_value: -1.2_f32, + name: "Jaw_Angle".to_owned(), + param_id: 30760, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mFaceJawShaper".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.03_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } } + ], + ), + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 30764, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.2_f32, + min_value: -1.0_f32, + name: "Lip_Cleft_Deep".to_owned(), + param_id: 30764, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mFaceLipUpperLeft" + .to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.003_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.3_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceLipUpperCenter".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : - 0.001_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : - 0.1_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceLipUpperRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.003_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.3_f32 } } + ], + ), + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 30765, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 2.5_f32, + min_value: -0.3_f32, + name: "Puffy_Lower_Lids".to_owned(), + param_id: 30765, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mFaceEyeLidLowerLeft" + .to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.05_f32, y : 0.05_f32, + z : 0.05_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyeLidLowerRight".to_owned(), has_position_deformation + : true, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.05_f32, y : + 0.05_f32, z : 0.05_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyecornerInnerLeft".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.05_f32, y : 0.05_f32, + z : 0.05_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyecornerInnerRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.05_f32, y : 0.05_f32, + z : 0.05_f32 } } + ], + ), + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 30772, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: -1.0_f32, + name: "EyeBone_Head_Elongate".to_owned(), + param_id: 30772, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mFaceRoot".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.25_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyeLidUpperLeft".to_owned(), has_position_deformation + : true, position_deformation : libremetaverse_types::Vector3 + { x : - 0.0038_f32, y : 0.0_f32, z : 0.0_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceEyeLidUpperRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : - 0.0038_f32, y : + 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyeLidLowerLeft".to_owned(), has_position_deformation + : true, position_deformation : libremetaverse_types::Vector3 + { x : - 0.0038_f32, y : 0.0_f32, z : 0.0_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceEyeLidLowerRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : - 0.0038_f32, y : + 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceNoseCenter".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.01_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, + z : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceNoseRight".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.005_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, + z : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceNoseLeft".to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : + 0.005_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceNoseBase".to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : + 0.005_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceLipUpperLeft".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.005_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, + z : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceLipUpperCenter".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.005_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, + z : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceLipUpperRight".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.005_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, + z : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceLipCornerRight".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.005_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, + z : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceLipCornerLeft".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.005_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, + z : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceLipLowerLeft".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.01_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, + z : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceLipLowerCenter".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.01_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, + z : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceLipLowerRight".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.01_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, + z : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceCheekLowerLeft".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.007_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, + z : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceCheekLowerRight".to_owned(), has_position_deformation + : true, position_deformation : libremetaverse_types::Vector3 + { x : 0.007_f32, y : 0.0_f32, z : 0.0_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceChin".to_owned(), has_position_deformation + : true, position_deformation : libremetaverse_types::Vector3 + { x : 0.014_f32, y : 0.0_f32, z : 0.0_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceTeethUpper".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.28_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceTeethLower".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.28_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceTongueBase".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.3_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceTongueTip".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.004_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, + z : 0.0_f32 } } + ], + ), + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 30796, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 3.0_f32, + min_value: -0.4_f32, + name: "Pointy_Ears".to_owned(), + param_id: 30796, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mFaceEar2Left".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : - 0.0149_f32, y : + 0.001_f32, z : 0.016_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEar2Right".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : - 0.0149_f32, y : - 0.001_f32, z : 0.016_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } } + ], + ), + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 30797, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.5_f32, + min_value: 0.0_f32, + name: "Fat_Upper_Lip".to_owned(), + param_id: 30797, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mFaceLipCornerLeft" + .to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : - + 0.002_f32, y : 0.0_f32, z : 0.001_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceLipCornerRight".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : - 0.002_f32, y : 0.0_f32, z : 0.001_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceLipUpperLeft".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : - 0.004_f32, y : + 0.0_f32, z : 0.006_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.1_f32, y : 0.0_f32, z + : 0.6_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceLipUpperCenter".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : - 0.004_f32, y : 0.0_f32, z : 0.003_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.1_f32, y : 0.0_f32, z : 0.4_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceLipUpperRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : - 0.004_f32, y : + 0.0_f32, z : 0.006_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.1_f32, y : 0.0_f32, z + : 0.6_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceLipLowerLeft".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : - 0.002_f32, y : 0.0_f32, z : 0.001_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceLipLowerCenter".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : - 0.002_f32, y : + 0.0_f32, z : 0.001_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceLipLowerRight".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : - 0.002_f32, y : 0.0_f32, z : 0.001_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } } + ], + ), + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 30798, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.5_f32, + min_value: 0.0_f32, + name: "Fat_Lower_Lip".to_owned(), + param_id: 30798, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mFaceLipCornerLeft" + .to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : - + 0.002_f32, y : 0.0_f32, z : - 0.002_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, + z : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceLipCornerRight".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : - 0.002_f32, y : 0.0_f32, z : - 0.002_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceLipUpperLeft".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : - 0.002_f32, y : + 0.0_f32, z : - 0.003_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceLipUpperCenter".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : - 0.002_f32, y : 0.0_f32, z : - 0.003_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceLipUpperRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : - 0.002_f32, y : + 0.0_f32, z : - 0.003_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceLipLowerLeft".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : - 0.005_f32, y : 0.0_f32, z : - 0.004_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.1_f32, y : 0.0_f32, z : 0.25_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceLipLowerCenter".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : - 0.005_f32, y : + 0.0_f32, z : - 0.004_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.1_f32, y : 0.0_f32, z + : 0.25_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceLipLowerRight".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : - 0.005_f32, y : 0.0_f32, z : - 0.004_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.1_f32, y : 0.0_f32, z : 0.25_f32 } } + ], + ), + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 30879, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 2.0_f32, + min_value: -0.5_f32, + name: "Male_Package".to_owned(), + param_id: 30879, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mGroin".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.5_f32, y : 0.25_f32, z + : 0.1_f32 } } + ], + ), + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 30880, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.2_f32, + min_value: -1.3_f32, + name: "Eyelid_Inner_Corner_Up".to_owned(), + param_id: 30880, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mFaceEyecornerInnerLeft" + .to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.004_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyecornerInnerRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.004_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } } + ], + ), + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 31505, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Lip_Thickness".to_owned(), + param_id: 31505, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mFaceLipCornerLeft" + .to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : + 0.005_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.2_f32, y : 0.0_f32, z + : 0.1_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceLipUpperLeft".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.004_f32, y : 0.0_f32, z : 0.004_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.2_f32, y : 0.0_f32, z : 0.4_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceLipUpperCenter".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.004_f32, y : 0.0_f32, + z : 0.004_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.2_f32, y : 0.0_f32, z + : 0.4_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceLipUpperRight".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.004_f32, y : 0.0_f32, z : 0.004_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.2_f32, y : 0.0_f32, z : 0.4_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceLipCornerRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.005_f32, y : 0.0_f32, + z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.2_f32, y : 0.0_f32, z + : 0.1_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceLipLowerLeft".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.006_f32, y : 0.0_f32, z : - 0.003_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.2_f32, y : 0.0_f32, z : 0.3_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceLipLowerCenter".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.006_f32, y : 0.0_f32, + z : - 0.003_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.2_f32, y : 0.0_f32, z + : 0.3_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceLipLowerRight".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.006_f32, y : 0.0_f32, z : - 0.003_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.2_f32, y : 0.0_f32, z : 0.3_f32 } } + ], + ), + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 31629, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Forehead Angle".to_owned(), + param_id: 31629, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mFaceForeheadLeft" + .to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : + 0.02_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.08_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceForeheadCenter".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.002_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.01_f32, y : 0.0_f32, + z : 0.08_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceForeheadRight".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.02_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, + z : 0.08_f32 } } + ], + ), + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 31663, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 2.0_f32, + min_value: 0.0_f32, + name: "Shift_Mouth".to_owned(), + param_id: 31663, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mFaceNoseCenter".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : - + 0.003_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceNoseBase".to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : - 0.004_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceNoseLeft".to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : - 0.003_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceNoseRight".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : - 0.003_f32, z : 0.0_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceTeethUpper".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : - + 0.006_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceTeethLower".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : - 0.006_f32, z : 0.0_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } } + ], + ), + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 31772, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "EyeBone_Head_Elongate".to_owned(), + param_id: 31772, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mFaceEyeAltLeft".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0058_f32, y : 0.0_f32, + z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyeAltRight".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0058_f32, y : 0.0_f32, z : 0.0_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } } + ], + ), + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 32629, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Forehead Angle".to_owned(), + param_id: 32629, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mFaceForeheadLeft" + .to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : - + 0.01_f32, y : 0.0_f32, z : - 0.01_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.2_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceForeheadCenter".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : - 0.001_f32, y : 0.0_f32, z : 0.001_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceForeheadRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : - 0.01_f32, y : 0.0_f32, + z : - 0.01_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.2_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyebrowInnerRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.002_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyebrowInnerLeft".to_owned(), has_position_deformation + : true, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : 0.002_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceEyebrowCenterRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.003_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyebrowCenterLeft".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.003_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } } + ], + ), + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 32663, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 2.0_f32, + min_value: 0.0_f32, + name: "Shift_Mouth".to_owned(), + param_id: 32663, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mFaceNoseCenter".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.003_f32, + z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceNoseBase".to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.004_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceNoseLeft".to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.003_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceNoseRight".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.003_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, + z : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceTeethUpper".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.006_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, + z : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceTeethLower".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.006_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, + z : 0.0_f32 } } + ], + ), + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 32772, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "EyeBone_Head_Elongate".to_owned(), + param_id: 32772, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mFaceEyeAltLeft".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : - 0.0032_f32, y : + 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyeAltRight".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : - 0.0032_f32, y : 0.0_f32, z : 0.0_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } } + ], + ), + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 40007, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 0.5_f32, + min_value: -0.5_f32, + name: "Weak_Chin".to_owned(), + param_id: 40007, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mFaceChin".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : - 0.025_f32, y : + 0.0_f32, z : 0.005_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } } + ], + ), + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 40017, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: -0.5_f32, + name: "Square_Jaw".to_owned(), + param_id: 40017, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mFaceJaw".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.5_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceJawShaper".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.5_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceLipLowerRight".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.0_f32, y : 0.0038_f32, z : 0.0_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceLipLowerLeft".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : - + 0.0038_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } } + ], + ), + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 40185, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: -1.0_f32, + name: "Deep_Chin".to_owned(), + param_id: 40185, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mFaceChin".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : - 0.02_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } } + ], + ), + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 41629, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Forehead Angle".to_owned(), + param_id: 41629, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mFaceForeheadLeft" + .to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : + 0.02_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.08_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceForeheadCenter".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.002_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.01_f32, y : 0.0_f32, + z : 0.08_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceForeheadRight".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : 0.02_f32, y : 0.0_f32, z : 0.0_f32 }, scale_deformation + : libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, + z : 0.08_f32 } } + ], + ), + volume_morphs: None, + wearable: None, + }, + ); + params + .insert( + 42629, + VisualParam { + alpha_params: None, + color_params: None, + default_value: 0.0_f32, + driven_params: None, + drivers: None, + group: 1, + is_bump_attribute: false, + label: "".to_owned(), + label_max: "".to_owned(), + label_min: "".to_owned(), + max_value: 1.0_f32, + min_value: 0.0_f32, + name: "Forehead Angle".to_owned(), + param_id: 42629, + skeletal_distortions: Some( + vec![ + SkeletalBoneInfo { bone_name : "mFaceForeheadLeft" + .to_owned(), has_position_deformation : true, + position_deformation : libremetaverse_types::Vector3 { x : - + 0.01_f32, y : 0.0_f32, z : - 0.01_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.2_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceForeheadCenter".to_owned(), has_position_deformation : + true, position_deformation : libremetaverse_types::Vector3 { + x : - 0.001_f32, y : 0.0_f32, z : 0.001_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceForeheadRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : - 0.01_f32, y : 0.0_f32, + z : - 0.01_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.2_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyebrowInnerRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.002_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyebrowInnerLeft".to_owned(), has_position_deformation + : true, position_deformation : libremetaverse_types::Vector3 + { x : 0.0_f32, y : 0.0_f32, z : 0.002_f32 }, + scale_deformation : libremetaverse_types::Vector3 { x : + 0.0_f32, y : 0.0_f32, z : 0.0_f32 } }, SkeletalBoneInfo { + bone_name : "mFaceEyebrowCenterRight".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.003_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } }, SkeletalBoneInfo { bone_name : + "mFaceEyebrowCenterLeft".to_owned(), + has_position_deformation : true, position_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.003_f32 }, scale_deformation : + libremetaverse_types::Vector3 { x : 0.0_f32, y : 0.0_f32, z + : 0.0_f32 } } + ], + ), + volume_morphs: None, + wearable: None, + }, + ); + params + }) +} +pub struct VisualParams; +impl VisualParams { + pub fn group0_param_ids() -> Vec { + GROUP0_PARAM_IDS.to_vec() + } + pub fn params() -> libremetaverse_types::compat::SortedList { + libremetaverse_types::compat::SortedList(generated_params().clone()) + } + pub fn find( + name: String, + wearable: Option, + ) -> Result { + Ok( + generated_params() + .values() + .find(|param| param.name == name && param.wearable == wearable) + .cloned() + .unwrap_or_default(), + ) + } +} +pub(crate) fn decode_visual_params(bytes: &[u8]) -> HashMap { + let params = generated_params(); + let mut result = HashMap::with_capacity(GROUP0_PARAM_IDS.len()); + for (&id, &value) in GROUP0_PARAM_IDS.iter().zip(bytes) { + if let Some(param) = params.get(&id) { + let range = param.max_value - param.min_value; + let mut decoded = f32::from(value) * (1.0 / 255.0) * range + param.min_value; + if decoded.abs() < range * (1.0 / 255.0) { + decoded = 0.0; + } + result.insert(id, decoded); + } + } + for driver in params.values() { + let Some(driven_params) = &driver.driven_params else { continue }; + let Some(&driver_value) = result.get(&driver.param_id) else { continue }; + for driven in driven_params { + let Some(target) = params.get(&driven.param_id) else { continue }; + let normalized = if driven.has_range { + if driver_value < driven.min1 { + 0.0 + } else if driver_value < driven.max1 { + (driver_value - driven.min1) / (driven.max1 - driven.min1) + } else if driver_value <= driven.max2 { + 1.0 + } else if driver_value < driven.min2 { + (driven.min2 - driver_value) / (driven.min2 - driven.max2) + } else { + 0.0 + } + } else { + let range = driver.max_value - driver.min_value; + if range > 1.0e-6 { + (driver_value - driver.min_value) / range + } else { + 0.0 + } + } + .clamp(0.0, 1.0); + result + .insert( + driven.param_id, + target.min_value + normalized * (target.max_value - target.min_value), + ); + } + } + result +} +pub(crate) fn new_avatar() -> Result { + Ok(crate::Avatar { + animations: Vec::new(), + appearance_flags: crate::AppearanceFlags::NONE, + appearance_version: 0, + attachments: Vec::new(), + cof_version: 0, + control_flags: crate::AgentManagerControlFlags(0), + groups: Vec::new(), + hover_height: libremetaverse_types::Vector3::zero(), + profile_interests: crate::AvatarInterests { + languages_text: String::new(), + skills_mask: 0, + skills_text: String::new(), + want_to_mask: 0, + want_to_text: String::new(), + }, + profile_properties: crate::AvatarAvatarProperties { + about_text: String::new(), + born_on: String::new(), + charter_member: String::new(), + first_life_image: libremetaverse_types::UUID::zero(), + first_life_text: String::new(), + flags: crate::ProfileFlags(0), + partner: libremetaverse_types::UUID::zero(), + profile_image: libremetaverse_types::UUID::zero(), + profile_url: String::new(), + }, + profile_statistics: crate::AvatarStatistics { + appearance_negative: 0, + appearance_positive: 0, + behavior_negative: 0, + behavior_positive: 0, + building_negative: 0, + building_positive: 0, + given_negative: 0, + given_positive: 0, + }, + visual_parameters: Vec::new(), + }) +} +pub(crate) fn new_texture_entry_face() -> Result< + crate::PrimitiveTextureEntryFace, + crate::Error, +> { + Ok(crate::PrimitiveTextureEntryFace) +} +#[cfg(test)] +mod tests { + use super::*; + #[test] + fn golden_catalog_shape_and_values() { + let params = generated_params(); + assert_eq!(params.len(), 672); + assert_eq!(GROUP0_PARAM_IDS.len(), 253); + assert!(GROUP0_PARAM_IDS.windows(2).all(| ids | ids[0] < ids[1])); + let height = ¶ms[&33]; + assert_eq!(height.name, "Height"); + assert_eq!(height.group, 0); + assert_eq!(height.wearable.as_deref(), Some("shape")); + assert_eq!(height.min_value, - 2.3); + assert_eq!(height.max_value, 2.0); + assert!(! height.skeletal_distortions.as_ref().unwrap().is_empty()); + } +} diff --git a/crates/libremetaverse/tests/generated_catalogs.rs b/crates/libremetaverse/tests/generated_catalogs.rs new file mode 100644 index 0000000..112c682 --- /dev/null +++ b/crates/libremetaverse/tests/generated_catalogs.rs @@ -0,0 +1,282 @@ +//! Golden fixtures for the native visual-parameter and foliage generators. + +#![allow(clippy::float_cmp)] // Golden XML values must retain their exact f32 representation. + +use libremetaverse::{ + DrivenParamInfo, Grass, GrassDefinitions, SkeletalBoneInfo, Tree, TreeDefinitions, + VisualAlphaParam, VisualColorOperation, VisualColorParam, VisualParam, VisualParams, + VolumeMorphInfo, +}; +use libremetaverse_types::{Color4, UUID, Vector3}; + +#[test] +fn visual_catalog_matches_the_pinned_character_fixture() { + let params = VisualParams::params(); + let transmitted = VisualParams::group0_param_ids(); + + assert_eq!(params.0.len(), 672); + assert_eq!(transmitted.len(), 253); + assert_eq!(transmitted.first(), Some(&1)); + assert_eq!(transmitted.last(), Some(&11_001)); + assert!(transmitted.windows(2).all(|ids| ids[0] < ids[1])); + assert!(transmitted.iter().all(|id| { + params + .0 + .get(id) + .is_some_and(|param| matches!(param.group, 0 | 3)) + })); + + assert_eq!( + params + .0 + .values() + .filter(|param| param.alpha_params.is_some()) + .count(), + 94 + ); + assert_eq!( + params + .0 + .values() + .filter(|param| param.color_params.is_some()) + .count(), + 104 + ); + assert_eq!( + params + .0 + .values() + .filter(|param| param.driven_params.is_some()) + .count(), + 130 + ); + assert_eq!( + params + .0 + .values() + .filter(|param| param.skeletal_distortions.is_some()) + .count(), + 82 + ); + assert_eq!( + params + .0 + .values() + .filter(|param| param.volume_morphs.is_some()) + .count(), + 30 + ); + + let height = VisualParams::find("Height".to_owned(), Some("shape".to_owned())).unwrap(); + assert_eq!(height.param_id, 33); + assert_eq!(height.group, 0); + assert_eq!(height.label_min, "Short"); + assert_eq!(height.label_max, "Tall"); + assert_eq!(height.default_value, 0.0); + assert_eq!(height.min_value, -2.3); + assert_eq!(height.max_value, 2.0); + assert_eq!(height.skeletal_distortions.as_ref().unwrap().len(), 35); + + let missing = VisualParams::find("missing".to_owned(), None).unwrap(); + assert_eq!(missing, VisualParam::default()); +} + +#[test] +fn visual_metadata_constructors_preserve_every_argument() { + let alpha = VisualAlphaParam::new(0.25, "mask.tga".to_owned(), true, false).unwrap(); + assert_eq!(alpha.domain, 0.25); + assert_eq!(alpha.tga_file, "mask.tga"); + assert!(alpha.skip_if_zero); + assert!(!alpha.multiply_blend); + + let colors = vec![Color4 { + r: 0.1, + g: 0.2, + b: 0.3, + a: 0.4, + }]; + let color = VisualColorParam::new(VisualColorOperation::Blend, colors.clone()).unwrap(); + assert_eq!(color.operation, VisualColorOperation::Blend); + assert_eq!(color.colors, colors); + + let driven = DrivenParamInfo::new(91, 0.1, 0.2, 0.8, 0.9, true).unwrap(); + assert_eq!(driven.param_id, 91); + assert_eq!(driven.min1, 0.1); + assert_eq!(driven.max1, 0.2); + assert_eq!(driven.max2, 0.8); + assert_eq!(driven.min2, 0.9); + assert!(driven.has_range); + + let scale = Vector3 { + x: 1.0, + y: 2.0, + z: 3.0, + }; + let position = Vector3 { + x: 4.0, + y: 5.0, + z: 6.0, + }; + let skeletal = SkeletalBoneInfo::new("mBone".to_owned(), scale, position, true).unwrap(); + assert_eq!(skeletal.bone_name, "mBone"); + assert_eq!(skeletal.scale_deformation, scale); + assert_eq!(skeletal.position_deformation, position); + assert!(skeletal.has_position_deformation); + + let volume = VolumeMorphInfo::new("BELLY".to_owned(), scale, true, position, true).unwrap(); + assert_eq!(volume.bone_name, "BELLY"); + assert_eq!(volume.scale_delta, scale); + assert_eq!(volume.position_delta, position); + assert!(volume.has_scale); + assert!(volume.has_position); + + let param = VisualParam::new( + 7, + "Test".to_owned(), + 3, + Some("shape".to_owned()), + "Label".to_owned(), + "Low".to_owned(), + "High".to_owned(), + 0.5, + -1.0, + 2.0, + true, + Some(vec![91]), + Some(Some(alpha.clone())), + Some(Some(color.clone())), + Some(vec![driven.clone()]), + Some(vec![skeletal.clone()]), + Some(vec![volume.clone()]), + ) + .unwrap(); + assert_eq!(param.param_id, 7); + assert_eq!(param.name, "Test"); + assert_eq!(param.group, 3); + assert_eq!(param.wearable.as_deref(), Some("shape")); + assert_eq!(param.label, "Label"); + assert_eq!(param.label_min, "Low"); + assert_eq!(param.label_max, "High"); + assert_eq!(param.default_value, 0.5); + assert_eq!(param.min_value, -1.0); + assert_eq!(param.max_value, 2.0); + assert!(param.is_bump_attribute); + assert_eq!(param.drivers.as_deref(), Some([91].as_slice())); + assert_eq!(param.alpha_params, Some(Some(alpha))); + assert_eq!(param.color_params, Some(Some(color))); + assert_eq!(param.driven_params, Some(vec![driven])); + assert_eq!(param.skeletal_distortions, Some(vec![skeletal])); + assert_eq!(param.volume_morphs, Some(vec![volume])); +} + +#[test] +fn tree_catalog_matches_every_pine_one_field() { + let trees = TreeDefinitions::all(); + assert_eq!(trees.len(), 21); + for (species_id, tree) in trees.iter().enumerate() { + assert_eq!(tree.species_id(), i32::try_from(species_id).unwrap()); + } + + let pine = TreeDefinitions::get(Tree::Pine1).unwrap(); + assert_eq!(pine.name(), "Pine 1"); + assert_eq!(pine.species_id(), 0); + assert_eq!( + pine.texture_id(), + UUID::parse("0187babf-6c0d-5891-ebed-4ecab1426683".to_owned()).unwrap() + ); + assert_eq!(pine.droop(), 60.0); + assert_eq!(pine.twist(), 5.0); + assert_eq!(pine.branches(), 5.0); + assert_eq!(pine.depth(), 1); + assert_eq!(pine.scale_step(), 0.7); + assert_eq!(pine.trunk_depth(), 6.0); + assert_eq!(pine.branch_length(), 8.0); + assert_eq!(pine.trunk_length(), 11.5); + assert_eq!(pine.leaf_scale(), 22.0); + assert_eq!(pine.billboard_scale(), 39.5); + assert_eq!(pine.billboard_ratio(), 1.1); + assert_eq!(pine.trunk_aspect(), 0.1); + assert_eq!(pine.branch_aspect(), 0.05); + assert_eq!(pine.leaf_rotate(), 20.0); + assert_eq!(pine.noise_mag(), 0.5); + assert_eq!(pine.noise_scale(), 2.5); + assert_eq!(pine.taper(), 0.8); + assert_eq!(pine.repeat_z(), 3); + + let replacement_texture = + UUID::parse("00000000-0000-0000-0000-000000000001".to_owned()).unwrap(); + let mut changed = pine; + changed.set_name("Changed".to_owned()); + changed.set_species_id(42); + changed.set_texture_id(replacement_texture); + changed.set_droop(1.0); + changed.set_twist(2.0); + changed.set_branches(3.0); + changed.set_depth(4); + changed.set_scale_step(5.0); + changed.set_trunk_depth(6.0); + changed.set_branch_length(7.0); + changed.set_trunk_length(8.0); + changed.set_leaf_scale(9.0); + changed.set_billboard_scale(10.0); + changed.set_billboard_ratio(11.0); + changed.set_trunk_aspect(12.0); + changed.set_branch_aspect(13.0); + changed.set_leaf_rotate(14.0); + changed.set_noise_mag(15.0); + changed.set_noise_scale(16.0); + changed.set_taper(17.0); + changed.set_repeat_z(18); + assert_eq!(changed.name(), "Changed"); + assert_eq!(changed.species_id(), 42); + assert_eq!(changed.texture_id(), replacement_texture); + assert_eq!(changed.droop(), 1.0); + assert_eq!(changed.twist(), 2.0); + assert_eq!(changed.branches(), 3.0); + assert_eq!(changed.depth(), 4); + assert_eq!(changed.scale_step(), 5.0); + assert_eq!(changed.trunk_depth(), 6.0); + assert_eq!(changed.branch_length(), 7.0); + assert_eq!(changed.trunk_length(), 8.0); + assert_eq!(changed.leaf_scale(), 9.0); + assert_eq!(changed.billboard_scale(), 10.0); + assert_eq!(changed.billboard_ratio(), 11.0); + assert_eq!(changed.trunk_aspect(), 12.0); + assert_eq!(changed.branch_aspect(), 13.0); + assert_eq!(changed.leaf_rotate(), 14.0); + assert_eq!(changed.noise_mag(), 15.0); + assert_eq!(changed.noise_scale(), 16.0); + assert_eq!(changed.taper(), 17.0); + assert_eq!(changed.repeat_z(), 18); +} + +#[test] +fn grass_catalog_matches_the_pinned_fixture_and_properties_are_mutable() { + let grasses = GrassDefinitions::all(); + assert_eq!(grasses.len(), 6); + for (species_id, grass) in grasses.iter().enumerate() { + assert_eq!(grass.species_id(), i32::try_from(species_id).unwrap()); + } + + let mut undergrowth = GrassDefinitions::get(Grass::Undergrowth1).unwrap(); + assert_eq!(undergrowth.name(), "undergrowth_1"); + assert_eq!( + undergrowth.texture_id(), + UUID::parse("8f458549-173b-23ff-d4ff-bfaa5ea2371b".to_owned()).unwrap() + ); + assert_eq!(undergrowth.blade_size_x(), 2.0); + assert_eq!(undergrowth.blade_size_y(), 2.0); + + undergrowth.set_name("custom".to_owned()); + undergrowth.set_species_id(12); + let replacement_texture = + UUID::parse("00000000-0000-0000-0000-000000000002".to_owned()).unwrap(); + undergrowth.set_texture_id(replacement_texture); + undergrowth.set_blade_size_x(3.5); + undergrowth.set_blade_size_y(4.5); + assert_eq!(undergrowth.name(), "custom"); + assert_eq!(undergrowth.species_id(), 12); + assert_eq!(undergrowth.texture_id(), replacement_texture); + assert_eq!(undergrowth.blade_size_x(), 3.5); + assert_eq!(undergrowth.blade_size_y(), 4.5); +} diff --git a/tools/codegen/Cargo.toml b/tools/codegen/Cargo.toml index a8010f0..af897f2 100644 --- a/tools/codegen/Cargo.toml +++ b/tools/codegen/Cargo.toml @@ -10,6 +10,7 @@ publish = false [dependencies] prettyplease = "0.2" +roxmltree = "0.21.1" serde = { version = "1", features = ["derive"] } serde_json = "1" sha2 = "0.11" diff --git a/tools/codegen/src/lib.rs b/tools/codegen/src/lib.rs index 86cbf9d..35cde97 100644 --- a/tools/codegen/src/lib.rs +++ b/tools/codegen/src/lib.rs @@ -11,9 +11,13 @@ use std::fmt::Write as _; use std::fs; use std::path::{Component, Path, PathBuf}; +mod xml_catalog; + pub const INVENTORY_PATH: &str = "codegen/sources.json"; pub const MANIFEST_OUTPUT: &str = "codegen/generated/source_manifest.rs"; pub const PACKET_OUTPUT: &str = "crates/libremetaverse/src/packet_catalog.rs"; +pub const VISUAL_OUTPUT: &str = "crates/libremetaverse/src/visual_catalog.rs"; +pub const FOLIAGE_OUTPUT: &str = "crates/libremetaverse/src/foliage_catalog.rs"; pub const PUBLIC_API_PATH: &str = "api/public-api.json"; const RUST_KEYWORDS: &[&str] = &[ "as", "break", "const", "continue", "crate", "else", "enum", "extern", "false", "fn", "for", @@ -2043,6 +2047,14 @@ pub fn regenerate(root: &Path, check: bool) -> Result<(), String> { let outputs = [ (root.join(MANIFEST_OUTPUT), source_manifest_bytes(root)?), (root.join(PACKET_OUTPUT), packet_catalog_bytes(root)?), + ( + root.join(VISUAL_OUTPUT), + xml_catalog::visual_catalog_bytes(root)?, + ), + ( + root.join(FOLIAGE_OUTPUT), + xml_catalog::foliage_catalog_bytes(root)?, + ), ]; if check { for (path, expected) in outputs { @@ -2077,6 +2089,16 @@ mod tests { let first_packets = packet_catalog_bytes(&root).expect("first packet generation"); let second_packets = packet_catalog_bytes(&root).expect("second packet generation"); assert_eq!(first_packets, second_packets); + let first_visual = + xml_catalog::visual_catalog_bytes(&root).expect("first visual generation"); + let second_visual = + xml_catalog::visual_catalog_bytes(&root).expect("second visual generation"); + assert_eq!(first_visual, second_visual); + let first_foliage = + xml_catalog::foliage_catalog_bytes(&root).expect("first foliage generation"); + let second_foliage = + xml_catalog::foliage_catalog_bytes(&root).expect("second foliage generation"); + assert_eq!(first_foliage, second_foliage); } #[test] diff --git a/tools/codegen/src/xml_catalog.rs b/tools/codegen/src/xml_catalog.rs new file mode 100644 index 0000000..c1bcd3b --- /dev/null +++ b/tools/codegen/src/xml_catalog.rs @@ -0,0 +1,1104 @@ +//! Schema-validated generators for the pinned avatar and foliage XML catalogs. + +use super::{InputSpec, generated_rust, normalize_text, verify_inputs}; +use roxmltree::{Document, Node}; +use std::collections::{BTreeMap, BTreeSet}; +use std::fmt::Write as _; +use std::fs; +use std::path::Path; + +#[derive(Clone, Debug, PartialEq)] +struct AlphaDefinition { + domain: f32, + tga_file: String, + skip_if_zero: bool, + multiply_blend: bool, +} + +#[derive(Clone, Copy, Debug, Eq, PartialEq)] +enum ColorOperation { + Add, + Blend, +} + +#[derive(Clone, Debug, PartialEq)] +struct ColorDefinition { + operation: ColorOperation, + colors: Vec<[u8; 4]>, +} + +#[derive(Clone, Debug, PartialEq)] +struct DrivenDefinition { + param_id: i32, + min1: f32, + max1: f32, + max2: f32, + min2: f32, + has_range: bool, +} + +#[derive(Clone, Debug, PartialEq)] +struct SkeletalDefinition { + bone_name: String, + scale: [f32; 3], + position: [f32; 3], + has_position: bool, +} + +#[derive(Clone, Debug, PartialEq)] +struct VolumeMorphDefinition { + bone_name: String, + scale: [f32; 3], + has_scale: bool, + position: [f32; 3], + has_position: bool, +} + +#[derive(Clone, Debug, PartialEq)] +struct VisualDefinition { + param_id: i32, + name: String, + group: i32, + wearable: Option, + label: String, + label_min: String, + label_max: String, + default_value: f32, + min_value: f32, + max_value: f32, + is_bump_attribute: bool, + alpha: Option, + color: Option, + driven: Vec, + skeletal: Vec, + volume_morphs: Vec, +} + +#[derive(Clone, Debug, PartialEq)] +struct VisualCatalog { + params: BTreeMap, + transmitted_ids: Vec, +} + +#[derive(Clone, Debug, PartialEq)] +struct TreeDefinition { + name: String, + species_id: u8, + texture_id: String, + droop: f32, + twist: f32, + branches: f32, + depth: i32, + scale_step: f32, + trunk_depth: f32, + branch_length: f32, + trunk_length: f32, + leaf_scale: f32, + billboard_scale: f32, + billboard_ratio: f32, + trunk_aspect: f32, + branch_aspect: f32, + leaf_rotate: f32, + noise_mag: f32, + noise_scale: f32, + taper: f32, + repeat_z: i32, +} + +#[derive(Clone, Debug, PartialEq)] +struct GrassDefinition { + name: String, + species_id: u8, + texture_id: String, + blade_size_x: f32, + blade_size_y: f32, +} + +fn location(path: &str, node: Node<'_, '_>, code: &str, message: &str) -> String { + let position = node.document().text_pos_at(node.range().start); + format!( + "{path}:{}:{}: error[{code}]: {message}", + position.row, position.col + ) +} + +fn required_attribute( + path: &str, + node: Node<'_, '_>, + name: &str, + code: &str, +) -> Result { + node.attribute(name).map(str::to_owned).ok_or_else(|| { + location( + path, + node, + code, + &format!("<{}> requires attribute {name:?}", node.tag_name().name()), + ) + }) +} + +fn parse_i32(path: &str, node: Node<'_, '_>, name: &str, code: &str) -> Result { + let value = required_attribute(path, node, name, code)?; + value.parse::().map_err(|_| { + location( + path, + node, + code, + &format!("attribute {name:?} must be a signed 32-bit integer, found {value:?}"), + ) + }) +} + +fn parse_u8(path: &str, node: Node<'_, '_>, name: &str, code: &str) -> Result { + let value = required_attribute(path, node, name, code)?; + value.parse::().map_err(|_| { + location( + path, + node, + code, + &format!("attribute {name:?} must be an unsigned byte, found {value:?}"), + ) + }) +} + +fn parse_f32(path: &str, node: Node<'_, '_>, name: &str, code: &str) -> Result { + let value = required_attribute(path, node, name, code)?; + let parsed = value.parse::().map_err(|_| { + location( + path, + node, + code, + &format!("attribute {name:?} must be a finite float, found {value:?}"), + ) + })?; + if parsed.is_finite() { + Ok(parsed) + } else { + Err(location( + path, + node, + code, + &format!("attribute {name:?} must be a finite float, found {value:?}"), + )) + } +} + +fn optional_f32( + path: &str, + node: Node<'_, '_>, + name: &str, + default: f32, + code: &str, +) -> Result { + if node.attribute(name).is_some() { + parse_f32(path, node, name, code) + } else { + Ok(default) + } +} + +fn true_attribute(node: Node<'_, '_>, name: &str) -> bool { + node.attribute(name) + .is_some_and(|value| value.eq_ignore_ascii_case("true")) +} + +fn parse_vector( + path: &str, + node: Node<'_, '_>, + name: &str, + code: &str, +) -> Result<[f32; 3], String> { + let value = required_attribute(path, node, name, code)?; + let components = value + .split_ascii_whitespace() + .map(str::parse::) + .collect::, _>>() + .map_err(|_| { + location( + path, + node, + code, + &format!("attribute {name:?} must contain three finite floats, found {value:?}"), + ) + })?; + if components.len() != 3 || components.iter().any(|component| !component.is_finite()) { + return Err(location( + path, + node, + code, + &format!("attribute {name:?} must contain three finite floats, found {value:?}"), + )); + } + Ok([components[0], components[1], components[2]]) +} + +fn parse_color(path: &str, node: Node<'_, '_>) -> Result<[u8; 4], String> { + let value = required_attribute(path, node, "color", "VP021")?; + let components = value + .split(|character: char| character == ',' || character.is_ascii_whitespace()) + .filter(|component| !component.is_empty()) + .map(str::parse::) + .collect::, _>>() + .map_err(|_| { + location( + path, + node, + "VP021", + &format!("color must contain four bytes, found {value:?}"), + ) + })?; + if components.len() != 4 { + return Err(location( + path, + node, + "VP021", + &format!("color must contain four bytes, found {value:?}"), + )); + } + Ok([components[0], components[1], components[2], components[3]]) +} + +#[allow(clippy::too_many_lines)] // The schema mirrors all golden visual-param child variants. +fn parse_visual_catalog(path: &str, text: &str) -> Result { + let document = Document::parse(text).map_err(|error| format!("{path}: {error}"))?; + let root = document.root_element(); + if !root.has_tag_name("linden_avatar") { + return Err(location( + path, + root, + "VP001", + "root element must be ", + )); + } + + let mut params = BTreeMap::new(); + let mut transmitted_ids = Vec::new(); + for node in root + .descendants() + .filter(|node| node.is_element() && node.has_tag_name("param")) + { + let Some(group_text) = node.attribute("group") else { + continue; + }; + if node.attribute("shared") == Some("1") { + continue; + } + let param_id = parse_i32(path, node, "id", "VP010")?; + let name = required_attribute(path, node, "name", "VP011")?; + let group = group_text.parse::().map_err(|_| { + location( + path, + node, + "VP012", + &format!( + "attribute \"group\" must be a signed 32-bit integer, found {group_text:?}" + ), + ) + })?; + if params.contains_key(¶m_id) { + return Err(location( + path, + node, + "VP013", + &format!("duplicate visual parameter ID {param_id}"), + )); + } + let min_value = parse_f32(path, node, "value_min", "VP014")?; + let max_value = parse_f32(path, node, "value_max", "VP015")?; + if min_value > max_value { + return Err(location( + path, + node, + "VP016", + &format!("visual parameter {param_id} has value_min greater than value_max"), + )); + } + let default_value = optional_f32(path, node, "value_default", 0.0, "VP017")?; + + let parent_layer = node.parent().filter(|parent| parent.has_tag_name("layer")); + let is_bump_attribute = + parent_layer.and_then(|parent| parent.attribute("render_pass")) == Some("bump"); + let skip_color = parent_layer.is_some_and(|parent| { + parent.children().any(|child| { + child.has_tag_name("texture") + && child + .attribute("local_texture_alpha_only") + .is_some_and(|value| value.eq_ignore_ascii_case("true")) + }) + }); + + let mut alpha = None; + let mut color = None; + let mut driven = Vec::new(); + let mut skeletal = Vec::new(); + let mut volume_morphs = Vec::new(); + for child in node.children().filter(Node::is_element) { + if child.has_tag_name("param_alpha") { + if alpha.is_some() { + return Err(location(path, child, "VP018", "duplicate ")); + } + alpha = Some(AlphaDefinition { + domain: optional_f32(path, child, "domain", 0.0, "VP019")?, + tga_file: child.attribute("tga_file").unwrap_or_default().to_owned(), + skip_if_zero: true_attribute(child, "skip_if_zero"), + multiply_blend: true_attribute(child, "multiply_blend"), + }); + } else if child.has_tag_name("param_color") { + if color.is_some() { + return Err(location(path, child, "VP020", "duplicate ")); + } + let operation = match child.attribute("operation") { + None => ColorOperation::Add, + Some("blend" | "multiply") => ColorOperation::Blend, + Some(value) => { + return Err(location( + path, + child, + "VP022", + &format!("unknown color operation {value:?}"), + )); + } + }; + let colors = child + .children() + .filter(|value| value.is_element() && value.has_tag_name("value")) + .map(|value| parse_color(path, value)) + .collect::, _>>()?; + if colors.is_empty() { + return Err(location( + path, + child, + "VP023", + " requires at least one ", + )); + } + if !skip_color { + color = Some(ColorDefinition { operation, colors }); + } + } else if child.has_tag_name("param_driver") { + for driven_node in child + .children() + .filter(|value| value.is_element() && value.has_tag_name("driven")) + { + let driven_id = parse_i32(path, driven_node, "id", "VP030")?; + let has_range = driven_node.attribute("min1").is_some(); + let item = if has_range { + DrivenDefinition { + param_id: driven_id, + min1: parse_f32(path, driven_node, "min1", "VP031")?, + max1: parse_f32(path, driven_node, "max1", "VP032")?, + max2: parse_f32(path, driven_node, "max2", "VP033")?, + min2: parse_f32(path, driven_node, "min2", "VP034")?, + has_range: true, + } + } else { + for attribute in ["max1", "max2", "min2"] { + if driven_node.attribute(attribute).is_some() { + return Err(location( + path, + driven_node, + "VP035", + "driven range attributes must be supplied together", + )); + } + } + DrivenDefinition { + param_id: driven_id, + min1: 0.0, + max1: 0.0, + max2: 0.0, + min2: 0.0, + has_range: false, + } + }; + driven.push(item); + } + } else if child.has_tag_name("param_skeleton") { + for bone in child + .children() + .filter(|value| value.is_element() && value.has_tag_name("bone")) + { + let position = bone + .attribute("offset") + .map(|_| parse_vector(path, bone, "offset", "VP041")) + .transpose()? + .unwrap_or([0.0; 3]); + skeletal.push(SkeletalDefinition { + bone_name: required_attribute(path, bone, "name", "VP040")?, + scale: parse_vector(path, bone, "scale", "VP042")?, + position, + has_position: bone.attribute("offset").is_some(), + }); + } + } else if child.has_tag_name("param_morph") { + for morph in child + .children() + .filter(|value| value.is_element() && value.has_tag_name("volume_morph")) + { + let scale = morph + .attribute("scale") + .map(|_| parse_vector(path, morph, "scale", "VP051")) + .transpose()? + .unwrap_or([0.0; 3]); + let position = morph + .attribute("pos") + .map(|_| parse_vector(path, morph, "pos", "VP052")) + .transpose()? + .unwrap_or([0.0; 3]); + volume_morphs.push(VolumeMorphDefinition { + bone_name: required_attribute(path, morph, "name", "VP050")?, + scale, + has_scale: morph.attribute("scale").is_some(), + position, + has_position: morph.attribute("pos").is_some(), + }); + } + } + } + + if matches!(group, 0 | 3) { + transmitted_ids.push(param_id); + } + params.insert( + param_id, + VisualDefinition { + param_id, + name, + group, + wearable: node.attribute("wearable").map(str::to_owned), + label: node.attribute("label").unwrap_or_default().to_owned(), + label_min: node.attribute("label_min").unwrap_or_default().to_owned(), + label_max: node.attribute("label_max").unwrap_or_default().to_owned(), + default_value, + min_value, + max_value, + is_bump_attribute, + alpha, + color, + driven, + skeletal, + volume_morphs, + }, + ); + } + transmitted_ids.sort_unstable(); + if params.is_empty() || transmitted_ids.is_empty() { + return Err(location( + path, + root, + "VP060", + "visual parameter catalog must not be empty", + )); + } + for definition in params.values() { + for driven in &definition.driven { + if !params.contains_key(&driven.param_id) { + return Err(location( + path, + root, + "VP061", + &format!( + "visual parameter {} drives missing parameter {}", + definition.param_id, driven.param_id + ), + )); + } + } + } + Ok(VisualCatalog { + params, + transmitted_ids, + }) +} + +fn valid_uuid(value: &str) -> bool { + value.len() == 36 + && value.bytes().enumerate().all(|(index, byte)| match index { + 8 | 13 | 18 | 23 => byte == b'-', + _ => byte.is_ascii_hexdigit(), + }) +} + +fn parse_trees(path: &str, text: &str) -> Result, String> { + let document = Document::parse(text).map_err(|error| format!("{path}: {error}"))?; + let root = document.root_element(); + if !root.has_tag_name("tree_defs") { + return Err(location( + path, + root, + "TR001", + "root element must be ", + )); + } + let mut definitions = Vec::new(); + let mut ids = BTreeSet::new(); + for node in root.children().filter(Node::is_element) { + if !node.has_tag_name("tree") { + return Err(location( + path, + node, + "TR002", + " may contain only elements", + )); + } + let species_id = parse_u8(path, node, "species_id", "TR003")?; + if !ids.insert(species_id) { + return Err(location( + path, + node, + "TR004", + &format!("duplicate tree species ID {species_id}"), + )); + } + let texture_id = required_attribute(path, node, "texture_id", "TR005")?; + if !valid_uuid(&texture_id) { + return Err(location( + path, + node, + "TR006", + &format!("invalid tree texture UUID {texture_id:?}"), + )); + } + definitions.push(TreeDefinition { + name: required_attribute(path, node, "name", "TR007")?, + species_id, + texture_id, + droop: parse_f32(path, node, "droop", "TR010")?, + twist: parse_f32(path, node, "twist", "TR011")?, + branches: parse_f32(path, node, "branches", "TR012")?, + depth: parse_i32(path, node, "depth", "TR013")?, + scale_step: parse_f32(path, node, "scale_step", "TR014")?, + trunk_depth: parse_f32(path, node, "trunk_depth", "TR015")?, + branch_length: parse_f32(path, node, "branch_length", "TR016")?, + trunk_length: parse_f32(path, node, "trunk_length", "TR017")?, + leaf_scale: parse_f32(path, node, "leaf_scale", "TR018")?, + billboard_scale: parse_f32(path, node, "billboard_scale", "TR019")?, + billboard_ratio: parse_f32(path, node, "billboard_ratio", "TR020")?, + trunk_aspect: parse_f32(path, node, "trunk_aspect", "TR021")?, + branch_aspect: parse_f32(path, node, "branch_aspect", "TR022")?, + leaf_rotate: parse_f32(path, node, "leaf_rotate", "TR023")?, + noise_mag: parse_f32(path, node, "noise_mag", "TR024")?, + noise_scale: parse_f32(path, node, "noise_scale", "TR025")?, + taper: parse_f32(path, node, "taper", "TR026")?, + repeat_z: parse_i32(path, node, "repeat_z", "TR027")?, + }); + } + validate_contiguous( + path, + root, + "tree", + definitions.iter().map(|item| item.species_id), + )?; + Ok(definitions) +} + +fn parse_grass(path: &str, text: &str) -> Result, String> { + let document = Document::parse(text).map_err(|error| format!("{path}: {error}"))?; + let root = document.root_element(); + if !root.has_tag_name("grass_defs") { + return Err(location( + path, + root, + "GR001", + "root element must be ", + )); + } + let mut definitions = Vec::new(); + let mut ids = BTreeSet::new(); + for node in root.children().filter(Node::is_element) { + if !node.has_tag_name("grass") { + return Err(location( + path, + node, + "GR002", + " may contain only elements", + )); + } + let species_id = parse_u8(path, node, "species_id", "GR003")?; + if !ids.insert(species_id) { + return Err(location( + path, + node, + "GR004", + &format!("duplicate grass species ID {species_id}"), + )); + } + let texture_id = required_attribute(path, node, "texture_id", "GR005")?; + if !valid_uuid(&texture_id) { + return Err(location( + path, + node, + "GR006", + &format!("invalid grass texture UUID {texture_id:?}"), + )); + } + definitions.push(GrassDefinition { + name: required_attribute(path, node, "name", "GR007")?, + species_id, + texture_id, + blade_size_x: parse_f32(path, node, "blade_size_x", "GR010")?, + blade_size_y: parse_f32(path, node, "blade_size_y", "GR011")?, + }); + } + validate_contiguous( + path, + root, + "grass", + definitions.iter().map(|item| item.species_id), + )?; + Ok(definitions) +} + +fn validate_contiguous( + path: &str, + root: Node<'_, '_>, + name: &str, + ids: impl Iterator, +) -> Result<(), String> { + let ids = ids.collect::>(); + if ids.is_empty() { + return Err(location( + path, + root, + "FG020", + &format!("{name} catalog must not be empty"), + )); + } + if ids + .iter() + .copied() + .enumerate() + .any(|(index, id)| usize::from(id) != index) + { + return Err(location( + path, + root, + "FG021", + &format!("{name} species IDs must be contiguous and in source order from zero"), + )); + } + Ok(()) +} + +fn rust_f32(value: f32) -> String { + format!("{value:?}_f32") +} + +fn vector_expression(value: [f32; 3]) -> String { + format!( + "libremetaverse_types::Vector3 {{ x: {}, y: {}, z: {} }}", + rust_f32(value[0]), + rust_f32(value[1]), + rust_f32(value[2]) + ) +} + +fn option_string(value: Option<&str>) -> String { + value.map_or_else( + || "None".to_owned(), + |value| format!("Some({value:?}.to_owned())"), + ) +} + +#[allow(clippy::too_many_lines)] // One renderer keeps the generated public type/data contract atomic. +fn render_visual_catalog(catalog: &VisualCatalog) -> String { + let mut body = String::new(); + body.push_str( + "#![allow(clippy::float_cmp, clippy::manual_string_new, clippy::missing_errors_doc, clippy::must_use_candidate, clippy::needless_pass_by_value, clippy::too_many_lines, clippy::unnecessary_wraps)]\n\n\ + use std::collections::{BTreeMap, HashMap};\n\ + use std::sync::OnceLock;\n\n\ + #[derive(Clone, Debug, PartialEq)]\n\ + pub struct VisualAlphaParam { pub domain: f32, pub multiply_blend: bool, pub skip_if_zero: bool, pub tga_file: String }\n\ + impl VisualAlphaParam { pub fn new(domain: f32, tga_file: String, skip_if_zero: bool, multiply_blend: bool) -> Result { Ok(Self { domain, multiply_blend, skip_if_zero, tga_file }) } }\n\n\ + #[derive(Clone, Debug, PartialEq)]\n\ + pub struct VisualColorParam { pub colors: Vec, pub operation: crate::VisualColorOperation }\n\ + impl VisualColorParam { pub fn new(operation: crate::VisualColorOperation, colors: Vec) -> Result { Ok(Self { colors, operation }) } }\n\n\ + #[derive(Clone, Debug, PartialEq)]\n\ + pub struct DrivenParamInfo { pub has_range: bool, pub max1: f32, pub max2: f32, pub min1: f32, pub min2: f32, pub param_id: i32 }\n\ + impl DrivenParamInfo { pub fn new(param_id: i32, min1: f32, max1: f32, max2: f32, min2: f32, has_range: bool) -> Result { Ok(Self { has_range, max1, max2, min1, min2, param_id }) } }\n\n\ + #[derive(Clone, Debug, PartialEq)]\n\ + pub struct SkeletalBoneInfo { pub bone_name: String, pub has_position_deformation: bool, pub position_deformation: libremetaverse_types::Vector3, pub scale_deformation: libremetaverse_types::Vector3 }\n\ + impl SkeletalBoneInfo { pub fn new(bone_name: String, scale_deformation: libremetaverse_types::Vector3, position_deformation: libremetaverse_types::Vector3, has_position_deformation: bool) -> Result { Ok(Self { bone_name, has_position_deformation, position_deformation, scale_deformation }) } }\n\n\ + #[derive(Clone, Debug, PartialEq)]\n\ + pub struct VolumeMorphInfo { pub bone_name: String, pub has_position: bool, pub has_scale: bool, pub position_delta: libremetaverse_types::Vector3, pub scale_delta: libremetaverse_types::Vector3 }\n\ + impl VolumeMorphInfo { pub fn new(bone_name: String, scale_delta: libremetaverse_types::Vector3, has_scale: bool, position_delta: libremetaverse_types::Vector3, has_position: bool) -> Result { Ok(Self { bone_name, has_position, has_scale, position_delta, scale_delta }) } }\n\n\ + #[derive(Clone, Debug, PartialEq)]\n\ + pub struct VisualParam {\n\ + pub alpha_params: Option>, pub color_params: Option>,\n\ + pub default_value: f32, pub driven_params: Option>, pub drivers: Option>,\n\ + pub group: i32, pub is_bump_attribute: bool, pub label: String, pub label_max: String, pub label_min: String,\n\ + pub max_value: f32, pub min_value: f32, pub name: String, pub param_id: i32,\n\ + pub skeletal_distortions: Option>, pub volume_morphs: Option>, pub wearable: Option,\n\ + }\n\ + impl Default for VisualParam { fn default() -> Self { Self { alpha_params: None, color_params: None, default_value: 0.0, driven_params: None, drivers: None, group: 0, is_bump_attribute: false, label: String::new(), label_max: String::new(), label_min: String::new(), max_value: 0.0, min_value: 0.0, name: String::new(), param_id: 0, skeletal_distortions: None, volume_morphs: None, wearable: None } } }\n\ + impl VisualParam {\n\ + #[allow(clippy::too_many_arguments)]\n\ + pub fn new(param_id: i32, name: String, group: i32, wearable: Option, label: String, label_min: String, label_max: String, def_: f32, min: f32, max: f32, is_bump_attribute: bool, drivers: Option>, alpha: Option>, color_params: Option>, driven_params: Option>, skeletal_distortions: Option>, volume_morphs: Option>) -> Result { Ok(Self { alpha_params: alpha, color_params, default_value: def_, driven_params, drivers, group, is_bump_attribute, label, label_max, label_min, max_value: max, min_value: min, name, param_id, skeletal_distortions, volume_morphs, wearable }) }\n\ + }\n\n", + ); + body.push_str("const GROUP0_PARAM_IDS: &[i32] = &["); + for id in &catalog.transmitted_ids { + let _ = write!(body, "{id},"); + } + body.push_str("];\n\nfn generated_params() -> &'static BTreeMap {\n static PARAMS: OnceLock> = OnceLock::new();\n PARAMS.get_or_init(|| {\n let mut params = BTreeMap::new();\n"); + for definition in catalog.params.values() { + let alpha = definition.alpha.as_ref().map_or_else( + || "None".to_owned(), + |alpha| { + format!( + "Some(Some(VisualAlphaParam {{ domain: {}, multiply_blend: {}, skip_if_zero: {}, tga_file: {:?}.to_owned() }}))", + rust_f32(alpha.domain), alpha.multiply_blend, alpha.skip_if_zero, alpha.tga_file + ) + }, + ); + let color = definition.color.as_ref().map_or_else( + || "None".to_owned(), + |color| { + let operation = match color.operation { + ColorOperation::Add => "crate::VisualColorOperation::Add", + ColorOperation::Blend => "crate::VisualColorOperation::Blend", + }; + let values = color + .colors + .iter() + .map(|value| { + format!( + "libremetaverse_types::Color4 {{ r: f32::from({}_u8) / 255.0, g: f32::from({}_u8) / 255.0, b: f32::from({}_u8) / 255.0, a: f32::from({}_u8) / 255.0 }}", + value[0], value[1], value[2], value[3] + ) + }) + .collect::>() + .join(","); + format!("Some(Some(VisualColorParam {{ colors: vec![{values}], operation: {operation} }}))") + }, + ); + let drivers = if definition.driven.is_empty() { + "None".to_owned() + } else { + format!( + "Some(vec![{}])", + definition + .driven + .iter() + .map(|item| item.param_id.to_string()) + .collect::>() + .join(",") + ) + }; + let driven = if definition.driven.is_empty() { + "None".to_owned() + } else { + format!( + "Some(vec![{}])", + definition + .driven + .iter() + .map(|item| format!( + "DrivenParamInfo {{ has_range: {}, max1: {}, max2: {}, min1: {}, min2: {}, param_id: {} }}", + item.has_range, + rust_f32(item.max1), rust_f32(item.max2), rust_f32(item.min1), rust_f32(item.min2), item.param_id + )) + .collect::>() + .join(",") + ) + }; + let skeletal = if definition.skeletal.is_empty() { + "None".to_owned() + } else { + format!( + "Some(vec![{}])", + definition + .skeletal + .iter() + .map(|item| format!( + "SkeletalBoneInfo {{ bone_name: {:?}.to_owned(), has_position_deformation: {}, position_deformation: {}, scale_deformation: {} }}", + item.bone_name, item.has_position, vector_expression(item.position), vector_expression(item.scale) + )) + .collect::>() + .join(",") + ) + }; + let volume_morphs = if definition.volume_morphs.is_empty() { + "None".to_owned() + } else { + format!( + "Some(vec![{}])", + definition + .volume_morphs + .iter() + .map(|item| format!( + "VolumeMorphInfo {{ bone_name: {:?}.to_owned(), has_position: {}, has_scale: {}, position_delta: {}, scale_delta: {} }}", + item.bone_name, item.has_position, item.has_scale, vector_expression(item.position), vector_expression(item.scale) + )) + .collect::>() + .join(",") + ) + }; + let _ = writeln!( + body, + " params.insert({}, VisualParam {{ alpha_params: {alpha}, color_params: {color}, default_value: {}, driven_params: {driven}, drivers: {drivers}, group: {}, is_bump_attribute: {}, label: {:?}.to_owned(), label_max: {:?}.to_owned(), label_min: {:?}.to_owned(), max_value: {}, min_value: {}, name: {:?}.to_owned(), param_id: {}, skeletal_distortions: {skeletal}, volume_morphs: {volume_morphs}, wearable: {} }});", + definition.param_id, + rust_f32(definition.default_value), + definition.group, + definition.is_bump_attribute, + definition.label, + definition.label_max, + definition.label_min, + rust_f32(definition.max_value), + rust_f32(definition.min_value), + definition.name, + definition.param_id, + option_string(definition.wearable.as_deref()), + ); + } + body.push_str( + " params\n })\n}\n\n\ + pub struct VisualParams;\n\ + impl VisualParams {\n\ + pub fn group0_param_ids() -> Vec { GROUP0_PARAM_IDS.to_vec() }\n\ + pub fn params() -> libremetaverse_types::compat::SortedList { libremetaverse_types::compat::SortedList(generated_params().clone()) }\n\ + pub fn find(name: String, wearable: Option) -> Result { Ok(generated_params().values().find(|param| param.name == name && param.wearable == wearable).cloned().unwrap_or_default()) }\n\ + }\n\n\ + pub(crate) fn decode_visual_params(bytes: &[u8]) -> HashMap {\n\ + let params = generated_params();\n\ + let mut result = HashMap::with_capacity(GROUP0_PARAM_IDS.len());\n\ + for (&id, &value) in GROUP0_PARAM_IDS.iter().zip(bytes) { if let Some(param) = params.get(&id) { let range = param.max_value - param.min_value; let mut decoded = f32::from(value) * (1.0 / 255.0) * range + param.min_value; if decoded.abs() < range * (1.0 / 255.0) { decoded = 0.0; } result.insert(id, decoded); } }\n\ + for driver in params.values() {\n\ + let Some(driven_params) = &driver.driven_params else { continue };\n\ + let Some(&driver_value) = result.get(&driver.param_id) else { continue };\n\ + for driven in driven_params {\n\ + let Some(target) = params.get(&driven.param_id) else { continue };\n\ + let normalized = if driven.has_range {\n\ + if driver_value < driven.min1 { 0.0 } else if driver_value < driven.max1 { (driver_value - driven.min1) / (driven.max1 - driven.min1) } else if driver_value <= driven.max2 { 1.0 } else if driver_value < driven.min2 { (driven.min2 - driver_value) / (driven.min2 - driven.max2) } else { 0.0 }\n\ + } else { let range = driver.max_value - driver.min_value; if range > 1.0e-6 { (driver_value - driver.min_value) / range } else { 0.0 } }.clamp(0.0, 1.0);\n\ + result.insert(driven.param_id, target.min_value + normalized * (target.max_value - target.min_value));\n\ + }\n\ + }\n\ + result\n\ + }\n", + ); + body.push_str( + "pub(crate) fn new_avatar() -> Result {\n\ + Ok(crate::Avatar {\n\ + animations: Vec::new(), appearance_flags: crate::AppearanceFlags::NONE, appearance_version: 0,\n\ + attachments: Vec::new(), cof_version: 0, control_flags: crate::AgentManagerControlFlags(0),\n\ + groups: Vec::new(), hover_height: libremetaverse_types::Vector3::zero(),\n\ + profile_interests: crate::AvatarInterests { languages_text: String::new(), skills_mask: 0, skills_text: String::new(), want_to_mask: 0, want_to_text: String::new() },\n\ + profile_properties: crate::AvatarAvatarProperties { about_text: String::new(), born_on: String::new(), charter_member: String::new(), first_life_image: libremetaverse_types::UUID::zero(), first_life_text: String::new(), flags: crate::ProfileFlags(0), partner: libremetaverse_types::UUID::zero(), profile_image: libremetaverse_types::UUID::zero(), profile_url: String::new() },\n\ + profile_statistics: crate::AvatarStatistics { appearance_negative: 0, appearance_positive: 0, behavior_negative: 0, behavior_positive: 0, building_negative: 0, building_positive: 0, given_negative: 0, given_positive: 0 },\n\ + visual_parameters: Vec::new(),\n\ + })\n\ + }\n\n\ + pub(crate) fn new_texture_entry_face() -> Result { Ok(crate::PrimitiveTextureEntryFace) }\n\n\ + #[cfg(test)] mod tests { use super::*; #[test] fn golden_catalog_shape_and_values() { let params = generated_params(); assert_eq!(params.len(), 672); assert_eq!(GROUP0_PARAM_IDS.len(), 253); assert!(GROUP0_PARAM_IDS.windows(2).all(|ids| ids[0] < ids[1])); let height = ¶ms[&33]; assert_eq!(height.name, \"Height\"); assert_eq!(height.group, 0); assert_eq!(height.wearable.as_deref(), Some(\"shape\")); assert_eq!(height.min_value, -2.3); assert_eq!(height.max_value, 2.0); assert!(!height.skeletal_distortions.as_ref().unwrap().is_empty()); } }\n", + ); + body +} + +fn render_foliage_catalog(trees: &[TreeDefinition], grasses: &[GrassDefinition]) -> String { + let mut body = String::new(); + body.push_str( + "#![allow(clippy::missing_errors_doc, clippy::must_use_candidate, clippy::too_many_lines)]\n\n\ + use std::sync::OnceLock;\n\n\ + #[derive(Clone, Debug, PartialEq)]\n\ + pub struct TreeDefinition { name: String, species_id: i32, texture_id: libremetaverse_types::UUID, droop: f32, twist: f32, branches: f32, depth: i32, scale_step: f32, trunk_depth: f32, branch_length: f32, trunk_length: f32, leaf_scale: f32, billboard_scale: f32, billboard_ratio: f32, trunk_aspect: f32, branch_aspect: f32, leaf_rotate: f32, noise_mag: f32, noise_scale: f32, taper: f32, repeat_z: i32 }\n\ + impl TreeDefinition {\n\ + pub fn name(&self) -> String { self.name.clone() } pub fn set_name(&mut self, value: String) { self.name = value; }\n\ + pub fn species_id(&self) -> i32 { self.species_id } pub fn set_species_id(&mut self, value: i32) { self.species_id = value; }\n\ + pub fn texture_id(&self) -> libremetaverse_types::UUID { self.texture_id } pub fn set_texture_id(&mut self, value: libremetaverse_types::UUID) { self.texture_id = value; }\n", + ); + for name in [ + "droop", + "twist", + "branches", + "scale_step", + "trunk_depth", + "branch_length", + "trunk_length", + "leaf_scale", + "billboard_scale", + "billboard_ratio", + "trunk_aspect", + "branch_aspect", + "leaf_rotate", + "noise_mag", + "noise_scale", + "taper", + ] { + let _ = writeln!( + body, + " pub fn {name}(&self) -> f32 {{ self.{name} }} pub fn set_{name}(&mut self, value: f32) {{ self.{name} = value; }}" + ); + } + body.push_str(" pub fn depth(&self) -> i32 { self.depth } pub fn set_depth(&mut self, value: i32) { self.depth = value; }\n pub fn repeat_z(&self) -> i32 { self.repeat_z } pub fn set_repeat_z(&mut self, value: i32) { self.repeat_z = value; }\n}\n\n"); + body.push_str("fn generated_trees() -> &'static [TreeDefinition] { static TREES: OnceLock> = OnceLock::new(); TREES.get_or_init(|| vec![\n"); + for tree in trees { + let _ = writeln!( + body, + " TreeDefinition {{ name: {:?}.to_owned(), species_id: {}, texture_id: libremetaverse_types::UUID::parse({:?}.to_owned()).expect(\"validated tree UUID\"), droop: {}, twist: {}, branches: {}, depth: {}, scale_step: {}, trunk_depth: {}, branch_length: {}, trunk_length: {}, leaf_scale: {}, billboard_scale: {}, billboard_ratio: {}, trunk_aspect: {}, branch_aspect: {}, leaf_rotate: {}, noise_mag: {}, noise_scale: {}, taper: {}, repeat_z: {} }},", + tree.name, + tree.species_id, + tree.texture_id, + rust_f32(tree.droop), + rust_f32(tree.twist), + rust_f32(tree.branches), + tree.depth, + rust_f32(tree.scale_step), + rust_f32(tree.trunk_depth), + rust_f32(tree.branch_length), + rust_f32(tree.trunk_length), + rust_f32(tree.leaf_scale), + rust_f32(tree.billboard_scale), + rust_f32(tree.billboard_ratio), + rust_f32(tree.trunk_aspect), + rust_f32(tree.branch_aspect), + rust_f32(tree.leaf_rotate), + rust_f32(tree.noise_mag), + rust_f32(tree.noise_scale), + rust_f32(tree.taper), + tree.repeat_z + ); + } + body.push_str( + "]).as_slice() }\n\n\ + pub struct TreeDefinitions; impl TreeDefinitions { pub fn all() -> Vec { generated_trees().to_vec() } pub fn get(species: crate::Tree) -> Result { generated_trees().get(species as usize).cloned().ok_or(crate::Error::Argument) } }\n\n\ + #[derive(Clone, Debug, PartialEq)]\n\ + pub struct GrassDefinition { name: String, species_id: i32, texture_id: libremetaverse_types::UUID, blade_size_x: f32, blade_size_y: f32 }\n\ + impl GrassDefinition {\n\ + pub fn name(&self) -> String { self.name.clone() } pub fn set_name(&mut self, value: String) { self.name = value; }\n\ + pub fn species_id(&self) -> i32 { self.species_id } pub fn set_species_id(&mut self, value: i32) { self.species_id = value; }\n\ + pub fn texture_id(&self) -> libremetaverse_types::UUID { self.texture_id } pub fn set_texture_id(&mut self, value: libremetaverse_types::UUID) { self.texture_id = value; }\n\ + pub fn blade_size_x(&self) -> f32 { self.blade_size_x } pub fn set_blade_size_x(&mut self, value: f32) { self.blade_size_x = value; }\n\ + pub fn blade_size_y(&self) -> f32 { self.blade_size_y } pub fn set_blade_size_y(&mut self, value: f32) { self.blade_size_y = value; }\n\ + }\n\nfn generated_grasses() -> &'static [GrassDefinition] { static GRASSES: OnceLock> = OnceLock::new(); GRASSES.get_or_init(|| vec![\n", + ); + for grass in grasses { + let _ = writeln!( + body, + " GrassDefinition {{ name: {:?}.to_owned(), species_id: {}, texture_id: libremetaverse_types::UUID::parse({:?}.to_owned()).expect(\"validated grass UUID\"), blade_size_x: {}, blade_size_y: {} }},", + grass.name, + grass.species_id, + grass.texture_id, + rust_f32(grass.blade_size_x), + rust_f32(grass.blade_size_y) + ); + } + body.push_str( + "]).as_slice() }\n\n\ + pub struct GrassDefinitions; impl GrassDefinitions { pub fn all() -> Vec { generated_grasses().to_vec() } pub fn get(species: crate::Grass) -> Result { grass_by_id(species as u8) } }\n\ + pub(crate) fn grass_by_id(species: u8) -> Result { generated_grasses().get(usize::from(species)).cloned().ok_or(crate::Error::Argument) }\n\n\ + #[cfg(test)] mod tests { use super::*; #[test] fn golden_foliage_shape_and_values() { let trees = TreeDefinitions::all(); assert_eq!(trees.len(), 21); assert_eq!(trees[0].name(), \"Pine 1\"); assert_eq!(trees[0].species_id(), crate::Tree::Pine1 as i32); assert_eq!(trees[20].name(), \"Kelp 2\"); assert_eq!(TreeDefinitions::get(crate::Tree::Oak).unwrap(), trees[1]); let grass = GrassDefinitions::all(); assert_eq!(grass.len(), 6); assert_eq!(grass[5].name(), \"undergrowth_1\"); assert_eq!(GrassDefinitions::get(crate::Grass::Undergrowth1).unwrap(), grass[5]); } }\n", + ); + body +} + +fn load_input<'a>(inventory: &'a super::Inventory, id: &str) -> Result<&'a InputSpec, String> { + inventory + .inputs + .iter() + .find(|input| input.id == id) + .ok_or_else(|| format!("source inventory has no {id} input")) +} + +fn load_text(root: &Path, input: &InputSpec) -> Result { + let path = root.join(&input.vendored_path); + let bytes = fs::read(&path).map_err(|error| format!("{}: {error}", path.display()))?; + normalize_text(&input.vendored_path, &bytes).map_err(|error| error.to_string()) +} + +fn format_body(body: &str, name: &str) -> Result { + let syntax = syn::parse_file(body) + .map_err(|error| format!("generated {name} Rust is invalid: {error}"))?; + Ok(prettyplease::unparse(&syntax)) +} + +pub(super) fn visual_catalog_bytes(root: &Path) -> Result, String> { + let inventory = super::load_inventory(root)?; + verify_inputs(root, &inventory)?; + let input = load_input(&inventory, "avatar_lad")?; + let catalog = parse_visual_catalog(&input.vendored_path, &load_text(root, input)?)?; + let body = format_body(&render_visual_catalog(&catalog), "visual parameter")?; + Ok(generated_rust("visual-params", &[input], &body)) +} + +pub(super) fn foliage_catalog_bytes(root: &Path) -> Result, String> { + let inventory = super::load_inventory(root)?; + verify_inputs(root, &inventory)?; + let tree_input = load_input(&inventory, "trees")?; + let grass_input = load_input(&inventory, "grass")?; + let trees = parse_trees(&tree_input.vendored_path, &load_text(root, tree_input)?)?; + let grasses = parse_grass(&grass_input.vendored_path, &load_text(root, grass_input)?)?; + let body = format_body(&render_foliage_catalog(&trees, &grasses), "foliage")?; + Ok(generated_rust("foliage", &[tree_input, grass_input], &body)) +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn visual_schema_rejects_malformed_values_and_missing_driver_targets() { + let malformed = ""; + assert!( + parse_visual_catalog("bad.xml", malformed) + .unwrap_err() + .contains("error[VP014]") + ); + let missing = ""; + assert!( + parse_visual_catalog("bad.xml", missing) + .unwrap_err() + .contains("error[VP061]") + ); + } + + #[test] + fn foliage_schema_rejects_noncontiguous_ids_and_bad_uuids() { + let tree = ""; + assert!( + parse_trees("bad.xml", tree) + .unwrap_err() + .contains("error[TR006]") + ); + let grass = ""; + assert!( + parse_grass("bad.xml", grass) + .unwrap_err() + .contains("error[FG021]") + ); + } + + #[test] + fn pinned_catalog_semantics_have_stable_digests() { + let root = super::super::workspace_root(); + let inventory = super::super::load_inventory(&root).expect("pinned inventory"); + let visual_input = load_input(&inventory, "avatar_lad").expect("visual input"); + let visual = parse_visual_catalog( + &visual_input.vendored_path, + &load_text(&root, visual_input).expect("visual text"), + ) + .expect("visual catalog"); + let tree_input = load_input(&inventory, "trees").expect("tree input"); + let trees = parse_trees( + &tree_input.vendored_path, + &load_text(&root, tree_input).expect("tree text"), + ) + .expect("tree catalog"); + let grass_input = load_input(&inventory, "grass").expect("grass input"); + let grasses = parse_grass( + &grass_input.vendored_path, + &load_text(&root, grass_input).expect("grass text"), + ) + .expect("grass catalog"); + + assert_eq!( + super::super::sha256(format!("{visual:#?}").as_bytes()), + "3cdedcd412fa8f8dee4a99407968e849c55bdcdb13b883861352d042b1783a4a" + ); + assert_eq!( + super::super::sha256(format!("{trees:#?}\n{grasses:#?}").as_bytes()), + "636b3a00085d68f72c8506766a7e09c37e7db41bfca1acae228ad9cdb6b5ee50" + ); + } +} diff --git a/tools/generate_api_shims.py b/tools/generate_api_shims.py index d8a394a..f5689cd 100644 --- a/tools/generate_api_shims.py +++ b/tools/generate_api_shims.py @@ -39,6 +39,9 @@ TARGETS = { # the hand-written type so coverage remains deterministic. NATIVE_TYPES = { "T:LibreMetaverse.BitPack": "crate::bit_pack::BitPack", + "T:LibreMetaverse.DrivenParamInfo": "crate::visual_catalog::DrivenParamInfo", + "T:LibreMetaverse.GrassDefinition": "crate::foliage_catalog::GrassDefinition", + "T:LibreMetaverse.GrassDefinitions": "crate::foliage_catalog::GrassDefinitions", "T:LibreMetaverse.Packets.PacketType": "crate::packet_catalog::PacketType", "T:LibreMetaverse.PrimMesher.Coord": "crate::prim_mesher::Coord", "T:LibreMetaverse.PrimMesher.Face": "crate::prim_mesher::Face", @@ -100,6 +103,14 @@ NATIVE_TYPES = { "T:LibreMetaverse.Vector3d": "crate::vectors::Vector3d", "T:LibreMetaverse.Vector4": "crate::vectors::Vector4", "T:LibreMetaverse.Utils": "crate::utils::Utils", + "T:LibreMetaverse.SkeletalBoneInfo": "crate::visual_catalog::SkeletalBoneInfo", + "T:LibreMetaverse.TreeDefinition": "crate::foliage_catalog::TreeDefinition", + "T:LibreMetaverse.TreeDefinitions": "crate::foliage_catalog::TreeDefinitions", + "T:LibreMetaverse.VisualAlphaParam": "crate::visual_catalog::VisualAlphaParam", + "T:LibreMetaverse.VisualColorParam": "crate::visual_catalog::VisualColorParam", + "T:LibreMetaverse.VisualParam": "crate::visual_catalog::VisualParam", + "T:LibreMetaverse.VisualParams": "crate::visual_catalog::VisualParams", + "T:LibreMetaverse.VolumeMorphInfo": "crate::visual_catalog::VolumeMorphInfo", } # Native declarations whose cataloged method implementations are still emitted @@ -110,6 +121,22 @@ NATIVE_DECLARATIONS = { } NATIVE_MEMBER_BODIES = { + "M:LibreMetaverse.Avatar.#ctor": + "crate::visual_catalog::new_avatar()", + "M:LibreMetaverse.Avatar.DecodeVisualParams": + "Ok(crate::visual_catalog::decode_visual_params(&self.visual_parameters))", + "M:LibreMetaverse.AvatarAppearanceEventArgs.#ctor(LibreMetaverse.Simulator,LibreMetaverse.UUID,System.Boolean,LibreMetaverse.Primitive.TextureEntryFace,LibreMetaverse.Primitive.TextureEntryFace[],System.Collections.Generic.List{System.Byte},System.Byte,System.Int32,LibreMetaverse.AppearanceFlags,System.Int32)": + "Ok(Self { stored_visual_params: visual_params })", + "M:LibreMetaverse.AvatarAppearanceEventArgs.DecodeVisualParams": + "Ok(crate::visual_catalog::decode_visual_params(&self.stored_visual_params))", + "P:LibreMetaverse.AvatarAppearanceEventArgs.VisualParams": + "self.stored_visual_params.clone()", + "M:LibreMetaverse.Primitive.GetGrassDefinition": + "crate::foliage_catalog::grass_by_id(self.prim_data.state)", + "M:LibreMetaverse.Primitive.GetTreeDefinition": + "crate::foliage_catalog::TreeDefinitions::get(self.tree_species)", + "M:LibreMetaverse.Primitive.TextureEntryFace.#ctor(LibreMetaverse.Primitive.TextureEntryFace)": + "crate::visual_catalog::new_texture_entry_face()", "M:LibreMetaverse.StructuredData.OSDParser.BufferCharactersEqual(System.IO.StringReader,System.Char[],System.Int32)": "crate::notation::buffer_characters_equal(reader, buffer, offset)", "M:LibreMetaverse.StructuredData.OSDParser.ConsumeBytes(System.IO.Stream,System.Int32)": @@ -554,6 +581,7 @@ UNDERLYING = { } PRIVATE_LAYOUTS = { + "T:LibreMetaverse.AvatarAppearanceEventArgs": [("stored_visual_params", "Vec")], "T:LibreMetaverse.CacheDictionary`2": [("entries", "std::collections::HashMap")], "T:LibreMetaverse.DoubleDictionary`3": [ ("by_first", "std::collections::HashMap"), diff --git a/tools/generate_rust_mapping.py b/tools/generate_rust_mapping.py index d774a74..ab5d5ff 100644 --- a/tools/generate_rust_mapping.py +++ b/tools/generate_rust_mapping.py @@ -982,12 +982,16 @@ def validate_generated_shims() -> None: "crate::byte_order::", "crate::binary::", "crate::dispatch::", + "crate::foliage_catalog::", "crate::json_codec::", + "crate::message_codec::", "crate::notation::", "crate::packet_catalog::", "crate::packet_wire::", "crate::protobuf::", + "crate::visual_catalog::", "crate::xml_codec::", + "stored_visual_params", ) ): raise ValueError(f"generated shim function does not use the standardized failure: {path.relative_to(ROOT)}")